在列之间减去并用AWK打印

时间:2009-02-19 06:10:48

标签: unix awk

我有以下输入数据:

AATGCCACGTTGAGAGGCGTTCGCGGAAGGCGCG      44      40.000
AATGCCACTCGGGTCCGAGATGGCGGATCTCCAC      35      37.000
AATGCCAGAGCTGTGGTAGTGTGAAAGCAGCAGT      13      13.000

我想要做的是按第2列减去第3列 屈服:

AATGCCACGTTGAGAGGCGTTCGCGGAAGGCGCG      -4
AATGCCACTCGGGTCCGAGATGGCGGATCTCCAC      2
AATGCCAGAGCTGTGGTAGTGTGAAAGCAGCAGT      0

但为什么这个awk不起作用:

 $ awk '{dif =($3 - $2)}END{print dif}' input.txt

1 个答案:

答案 0 :(得分:4)

因为你只打印了一次差异,最后,这意味着除最后一行之外的所有内容都被有效地丢弃了。 (当{em>整个输入已被读取和处理时)END块仅运行一次。您想要这样:

awk 'NF > 0 { print $1 "\t" ($3 - $2) }' input.txt

NF > 0阻止awk为空行打印无意义的0。