我有一个类似如下的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"
,因此将它们一起设置为相同的字符而不是单独设置以避免重复。