Verwenden Sie Awk, um die Teilzeichenfolge zu extrahieren
Einem gegebenen hostname im format aaa0.bbb.ccc
möchte ich zum extrahieren der ersten Teilzeichenfolge vor .
dass aaa0
in diesem Fall. Ich benutze folgende awk-Skript zu tun,
echo aaa0.bbb.ccc | awk '{if (match($0, /\./)) {print substr($0, 0, RSTART - 1)}}'
Während das script läuft auf einer Maschine A
produziert aaa0
ist, läuft auf der Maschine B
produziert nur aaa
ohne 0
am Ende. Die Maschine läuft Ubuntu/Linaro
aber A
läuft eine neuere version von awk(gawk version 3.1.8 während B
mit älteren awk (mawk mit version 1.2)
Ich Frage im Allgemeinen, wie schreibt man einen kompatiblen awk-Skript ausführt, die die gleiche Funktionalität ...
InformationsquelleAutor der Frage Richard | 2013-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nur wollen, setzen Sie das Feld-Trennzeichen wie
.
mit der-F
option und drucken Sie das erste Feld:Gleiche Sache, aber mit Ausschneiden:
Oder mit
sed
:Sogar
grep
:InformationsquelleAutor der Antwort Chris Seymour
Oder nutzen Sie einfach schneiden:
InformationsquelleAutor der Antwort perreal
Lösen das problem in deiner Frage ist leicht. (überprüfen Sie andere' Antwort).
Wenn Sie wollen, schreiben Sie ein awk-Skript, die portable auf jedes awk-Implementierungen und-Versionen (gawk/nawk/mawk...) es ist wirklich schwer, selbst wenn die Option --posix (gawk)
Beispiel:
\x
entkommen, manche nichtFS
- interpreter arbeitet anderssowie alle die oben genannten Punkte sind nur im Allgemeinen gesprochen. Zurück zu Ihrem problem, problem ist nur in Bezug auf grundlegende Funktion von awk.
awk '{print $x}'
der Zeile, die arbeiten alle awks.Es gibt zwei Gründe, warum deine awk Zeile verhält sich anders auf gawk und mawk:
Ihre gebrauchten
substr()
Funktion falsch. dies ist die Hauptursache. Sie habensubstr($0, 0, RSTART - 1)
die0
sollte1
- egal, welche awk verwenden Sie. awk-array, string idx etc sind 1-basiert.gawk und mawk umgesetzt
substr()
anders.InformationsquelleAutor der Antwort Kent
Benötigen Sie keine externen Befehl an alle, nutzen Sie einfach Parameter-Erweiterung in der bash:
InformationsquelleAutor der Antwort choroba
Brauchen Sie nicht awk für diese...
Schwerer Optionen:
InformationsquelleAutor der Antwort anishsane