awk:如果满足条件,请在这些行中添加字符串

时间:2017-08-21 11:45:48

标签: bash 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,则只在该列中打印string

输入:

string 123 452 abc
def 420 902 ghi 

预期产出:

string 123 452 abc blue
def 420 902 ghi 

5 个答案:

答案 0 :(得分:4)

你可以像

那样一次性完成
 awk '$1 == "string" || $4 == "string" {print $0 " blue"; next} {print}' file > file.out

将测试第一个或第四个字段是string,如果是,则会打印后跟blue的行。我们使用next然后不处理下一个块(而不是做我们刚刚做的否定测试)。我们没有使用blue打印的任何一行,我们只是按原样打印。

答案 1 :(得分:4)

另一个awk解决方案:

$ awk '$1=="string" || $4=="string"{ NF+=1; $NF="blue" }1' file
string 123 452 abc blue
def 420 902 ghi

答案 2 :(得分:3)

 awk '{print $0 (($1 == "string" || $4 == "string") ? OFS "blue":"")}' infile

答案 3 :(得分:2)

另一个类似的选择:

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

输出:

string 123 452 abc blue
def 420 902 ghi

答案 4 :(得分:1)

下面也可以帮助你,我没有提到检查条件下的字段编号(考虑到你的Input_file与显示的样本相同),所以它看起来一行是否从字符串&#34开始;字符串"并以字符串"字符串"结束;然后它打印蓝色其他打印法线。

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