awk linux取差异并添加制表符分隔列文件

时间:2012-12-11 02:32:20

标签: linux unix awk

我有一个制表符分隔文件(没有标题),我想区分第3列和第2列,然后将它们全部加在一起。

即,

col1\tcol2\tcol3\tcol4
hi\t10\t100\t0.4
bye\t150\t400\t5.6

结果将是:(100-10)+(400-150)= 340

我如何使用awk单行进行此类操作?

感谢。

2 个答案:

答案 0 :(得分:3)

awk '{ total += $3 - $2 } END { print total }' file

答案 1 :(得分:1)

你走了:

awk 'BEGIN{FS="\t"} {sum+=($3-$2)} END{print sum}' input_file

<强>解释

  • BEGIN{FS="\t"}:在我们读取任何行之前,设置输入分隔符以显式使用制表符(FS代表字段分隔符),以防您的某个字段有空格。默认情况下,awk使用标签和空格作为FS
  • {sum+=($3-$2)}:对于读取的每一行,将第3到第2个字段之间的差异添加到sum
  • END{print sum}:阅读完所有行后,请打印sum
  • input_file:将输入文件名指定为awk作为参数;拯救一只猫。