减去两列,然后使用awk / grep和vi删除输出等于0的行

时间:2013-08-22 09:34:14

标签: awk grep

我在格式化文件时遇到问题。我想从第2列和第3列中减去值,并且结果为0,我想删除该行并将文件保存到单独的输出文件中。

这是输入文件:

chr9    139844640       139844640       18450
chr9    139888759       139888925       18451
chr9    139965116       139965298       18453
chr9    139981357       139981444       18454

输出文件:

chr9    139888759       139888925       18451
chr9    139965116       139965298       18453
chr9    139981357       139981444       18454

在那一刻,我正以非常漫长的方式做到这一点:

awk 'NR == 1 { $4 = "diff." } NR >= 0 { $4 = $2 - $3 } 1' input.bed > input_B.bed

然后在命令行上运行grep:

grep -wn 0 input_B.bed

并删除vi中的行。

任何有关更轻松/更快捷方式的建议都会非常棒!

1 个答案:

答案 0 :(得分:4)

简单如下:

awk '$2 - $3' infile >outfile

因为有默认的打印操作。因此,0true)的结果会触发它。

它产生:

chr9    139888759       139888925       18451
chr9    139965116       139965298       18453
chr9    139981357       139981444       18454