如何获取tsv中awk的两列之差



我有一个类似如下的tsv文件:

Hi 10 6
hello 7 1
Hi 6 2

因此,相关的输出应该是:

Hi 10 6 4
hello 7 1 6
Hi 6 2 4

我想创建第4列,它是2列$2和$3之间的差值,但是是绝对值。

我正在尝试下面的行,但没有正确的结果:

awk -Ft '{print $0 OFS $2-$3}' file

我该怎么办?马可

当你写没有引号的-Ft时,你邀请shell来解释字符串,因此shell将读取反斜杠并留给你-Ft。在awks-Ft表示"使用制表符作为分隔符";而在其他情况下,它意味着"使用字符t作为分隔符"。我假设既然你说你的文件是一个TSV,你希望它使用制表符,所以只要写你的代码不邀请shell来解释它,即-F't'而不是-Ft

之后,得到绝对值是很明显的,并且在许多帖子中得到了很好的覆盖:

$ awk 'BEGIN{FS=OFS="t"} {print $0, ($2>$3 ? $2-$3 : $3-$2)}' file
Hi  10  6   4
hello   7   1   6
Hi  6   2   4

我从使用-F't'改为FS="t",因为FS和OFS都需要设置为"t",因此将它们一起设置为相同的字符而不是单独设置以避免重复。

相关内容

  • 没有找到相关文章