2017-08-21 1 views
2

ich diese beiden Befehle zu kombinieren versuche:awk: wenn die Bedingung erfüllt ist, fügen Sie String in diesen Zeilen

awk -F[' '] '{if ($1=="string" || $4=="string") print $0" ""blue"}' file >file.out 
awk -F[' '] '{if ($1!="string" && $4!="string") print $0}' file >>file.out 

Grundsätzlich ich eine Spalte hinzufügen möchten, aber nur blue in dieser Spalte drucken, wenn entweder die erste oder die vierte Spalte sind gleich string.

Eingang:

string 123 452 abc 
def 420 902 ghi 

erwartete Ausgabe:

string 123 452 abc blue 
def 420 902 ghi 

Antwort

4

Sie können es in einem einzigen Durchgang tun wie

awk '$1 == "string" || $4 == "string" {print $0 " blue"; next} {print}' file > file.out 

die testen, wenn entweder die erste oder her Feld string und wird die Zeile gedruckt, gefolgt von blue wenn ja. Wir benutzen next dann, um den nächsten Block nicht zu verarbeiten (anstatt den negierten Test zu machen, den wir gerade gemacht haben). Jede Zeile, die wir nicht mit blue gedruckt haben, drucken wir so wie sie war.

4

Eine weitere awk Lösung:

$ awk '$1=="string" || $4=="string"{ NF+=1; $NF="blue" }1' file 
string 123 452 abc blue 
def 420 902 ghi 
3
awk '{print $0 (($1 == "string" || $4 == "string") ? OFS "blue":"")}' infile 
2

Eine weitere ähnliche Alternative:

awk '$1=="string" || $4=="string" {$0=$0" blue"} 1' infile 

Ausgang:

string 123 452 abc blue 
def 420 902 ghi 
1

Nach können auch Ihnen helfen, wo ich nicht zu erwähnen bin fie ld Zahlen in check-Zustand (unter Berücksichtigung, dass Ihre Input_file ist gleich wie im Beispiel gezeigt), so es aussieht, wenn eine Zeile beginnt von String "string" und endet von String "string" dann druckt blau sonst drucken normale Linie.

awk '/^string/||/string$/{print $0,"blue";next} 1' Input_file 
Verwandte Themen