2017-08-21 3 views
2

私はこれらの2つのコマンドを組み合わせしようとしています:のawk:条件が満たされた場合、これらの行に文字列を追加

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 

は基本的に私は列を追加したいのですが、最初のいずれかの場合にのみ、その列にblueを印刷または第4列はstringに等しい。

入力:

string 123 452 abc 
def 420 902 ghi 

予想される出力:

string 123 452 abc blue 
def 420 902 ghi 

答えて

4

あなたが最初かなどのフィールドがあるかどうかをテストします

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

のような単一のパスでそれを行うことができますその場合は、blueという行が印刷されます。 nextを使用して、次のブロックを処理しないようにします(これまでの否定テストを行うのではなく)。 blueで印刷しなかった行はそのまま印刷されます。

4

awk解決策:

$ 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

別の同様の代替:

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

出力:私は言及していないですどこ

string 123 452 abc blue 
def 420 902 ghi 
1

も、あなたを助けるかもしれません偽あなたのInput_fileがサンプルと同じであることを考慮して、ldの数字がチェックされているので、文字列 "string"から始まり、文字列 "string"から始まる行を探します。

awk '/^string/||/string$/{print $0,"blue";next} 1' Input_file 
関連する問題