我正在尝试将这两个命令组合在一起:
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
答案 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