只有在特定列中存在值/字符串时,才需要awk(或sed)命令帮助选择行。
示例:
如果第5列中存在“true”字样,我只想返回该行,如果第5列中不存在“true”,则不要将该行返回
输入:
john,jacob,jingle,schmidt,true
jason,jack,john,true,false
oscar,meir,true,weiner,false
tiffany,amber,false,theissen,true
jack,john,sally,true,true
期望的输出:
john,jacob,jingle,schmidt,true
tiffany,amber,false,theissen,true
jack,john,sally,true,true
我知道怎么做 拉回一个有一个单词的行并没有这样的单词:
awk '/true/ && !/false/'
但那不行 而且我知道如何删除一个单词,如果它在特定列中
awk 'BEGIN{FS=OFS=","} {sub(/true */, "", $5)} 1'
但我不知道如何将这两者结合起来。
我最好的猜测是:
awk 'BEGIN{FS=OFS=","} {"/true/",$5}
最糟糕的情况......:)
awk 'BEGIN{FS=OFS=","} {sub(/true */, "Unmatchablestring", $5)} 1' | awk '/Unmatchablestring/'
答案 0 :(得分:5)
您可以使用:
awk -F, '$5 == "true"' file
答案 1 :(得分:3)
如果您想检查第5列是否包含字面值true
,或者它是否应该完全匹配,那么您的问题就有点模糊。如果您想检查第5列是否包含 true
而不是使用匹配运算符~
,请执行以下操作:
awk -F, '$5 ~ /true/' file
否则请关注anubhava's answer。