1

我有一些文本文件。我需要在每个文件的第二列和第四列之间进行减法。减去的值应作为第五列打印到原始文件中。如何使用 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

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

4

2 回答 2

5
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
于 2012-10-05T05:06:14.863 回答
1

这可能对您有用(GNU sed 和 Bash):

sed -ri '/^\S+\s+(\S+)\s+\S+\s+(\S+)/s//echo "&\t$(echo \1-\2|bc)"/e' file
于 2012-10-05T05:47:25.847 回答