2017-05-30 74 views
0

我想识别那些在第5列上有句号(。)的行,并且将它们的第3列作为输出,因为我有标记来标识行。我想出了这一点:Awk打印行如果第5列包含句点

awk '{if ($5 = ".") {print $3}}' file.vcf 

但我的文件原本有42线,由该产生的结果有60个,所以显然有什么东西错我的代码。

wc -l file.vcf 
    42 
awk '{if ($5 = ".") {print $3}}' file.vcf | wc -l 
    60 

因此,所需的输出:与第3列的内容(我行名称标签)的列表,以便确定哪些行具有一个句号“”在第5列。

有什么想法?谢谢! (我在macOSsierra终端,顺便说一句)。

+1

awk如果需要double = like'$ 5 ==“。”' –

+1

'$ 5 ==“。”'如果'$ 5'只包含一个句点而不是句号'$ 5'字符串 –

+0

我仍然想知道如何从42行文件获得60行输出。 – jas

回答

2

尝试:(。)

awk '{if ($5 ~ /\./) { print $3} }' file.vcf 

基本上,检查以查看是否在第五列包含一个周期;如果是,打印第三列

+0

如果我想“删除该行”而不是打印$ 3? – melunuge92

+1

@ melunuge92用'!〜'代替'〜' –

+6

这里的if语句并不是真的有必要。 'awk'$ 5〜/\./ {print $ 3}'file.vcf'完成同样的事情。 – chepner