![awk und sed hängen das Zeilenende jeder zugehörigen Zeile an](https://rvso.com/image/1592566/awk%20und%20sed%20h%C3%A4ngen%20das%20Zeilenende%20jeder%20zugeh%C3%B6rigen%20Zeile%20an.png)
Ich möchte einige Zeilenmanipulationen durchführen, stecke aber bei der zeilenweisen Verarbeitung fest. Meine Datei sieht folgendermaßen aus:
10.10.10.10 ABtest
10.10.10.11 ABprod
Ich möchte an jede Zeile einen String anhängen, der dem String am Zeilenende entspricht.
Mein Ansatz besteht darin, awk zum Testen des Strings ABtest
am Zeilenende zu verwenden und dann mit sed von ABtest
in zu konvertieren test
. Danach möchte ich die Ausgabe an jede zugehörige Zeile anhängen.
Ich möchte folgende Ausgabe haben:
10.10.10.10 ABtest test
10.10.10.11 ABprod prod
Antwort1
Es besteht keine Notwendigkeit für beide, sed
und awk
Sie können mit einem Tool arbeiten. Der Code, der Ihr Ziel erreicht, awk
könnte sein
awk '
/AB/ {
printf $0
gsub("^AB", "", $2)
printf " %s\n", $2
}
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT
/<expression>/
sucht nach regulären Ausdrücken und der {<code>}
Teil sagt awk, was mit diesem Datensatz zu tun ist. In diesem speziellen Fall gsub
ersetzt die Funktion alle Vorkommen von „AB“ in der zweiten Spalte – wenn Sie nur das erste Vorkommen ersetzen möchten, verwenden Sie, sub()
aber in Bezug auf den regulären Ausdruck können Sie hier vermutlich das eine oder das andere mit demselben Ergebnis verwenden – und das Ergebnis wird anschließend gedruckt.
Aus Ihrer Frage geht nicht hervor, ob zwischen den zu bearbeitenden Zeilen Zeilen vorhanden sind, die unverändert gedruckt werden sollen. Wenn dies der Fall ist, müssen Sie nach dem Match-and-Edit-Vorgang wie folgt zum nächsten Datensatz springen:
awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT
Vielleicht sollten Sie einen noch spezifischeren Test erstellen, indem Sie verwenden if
. Ich empfehle Ihnen dringend, einen Blick auf einige Awk-Ressourcen zu werfen (HieroderHierZum Beispiel)