用awk或sed在两列之间减法

时间:2012-10-05 05:02:35

标签: sed awk

我有一些文本文件。我需要在每个文件中的第二列和第四列之间进行减法。减去的值应作为第五列打印到原始文件。我怎么能用awk或sed做到这一点?

HII 62.0    HII 35.1
MEE 21.3    MEE 21.3
GLL 42.3    GLL 18.5
ASS 105.9   ASS 105.9
RRG 65.6
GLL 48.3
SES 83.5    

Desired output

HII 62.0    HII 35.1   26.9
MEE 21.3    MEE 21.3    0
GLL 42.3    GLL 18.5   23.8
ASS 105.9   ASS 105.9   0
RRG 65.6
GLL 48.3
SES 83.5

如果第三列和第四列为空白,则无需减去。

2 个答案:

答案 0 :(得分:3)

awk 'NF == 2 { print }
     NF == 4 { print $0, $2 - $4 }'

这可以全部安装在一条线上,但当它分布在两条线上时它更清楚它的作用。

如果您想要更好地控制格式,可以使用printf()代替print

清理数据中的尾随空格后,会产生:

HII 62.0    HII 35.1 26.9
MEE 21.3    MEE 21.3 0
GLL 42.3    GLL 18.5 23.8
ASS 105.9   ASS 105.9 0
RRG 65.6
GLL 48.3
SES 83.5

答案 1 :(得分:1)

这可能适合你(GNU sed& Bash):

sed -ri '/^\S+\s+(\S+)\s+\S+\s+(\S+)/s//echo "&\t$(echo \1-\2|bc)"/e' file