仅当字符串存在于特定列中时才打印行

时间:2015-06-24 22:15:12

标签: bash awk sed

只有在特定列中存在值/字符串时,才需要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/'

2 个答案:

答案 0 :(得分:5)

您可以使用:

awk -F, '$5 == "true"' file

答案 1 :(得分:3)

如果您想检查第5列是否包含字面值true,或者它是否应该完全匹配,那么您的问题就有点模糊。如果您想检查第5列是否包含 true而不是使用匹配运算符~,请执行以下操作:

awk -F, '$5 ~ /true/' file

否则请关注anubhava's answer