我有一些文本文件,如下所示。我想减去第 2 列和第 4 列的值,并且需要为输出创建一个新列。
co1 co2 co3 co4
r1 15.2 13.0 21.4
r2 23 15 15.7
r3 14 8 12
期望的输出
co1 co2 co3 co4 diff.
r1 15.2 13.0 21.4 -6.2
r2 23 15 15.7 7.3
r3 14 8 12 2
注意:您可以将 awk 命令全部放在一行上,但这更整洁(而且更透明,并且如果需要的话更容易修改)。
这个
so.awk
脚本:
NR==1{print $0, " diff.\n"}
NR>2{printf("%s\t%5.1f\n", $0, $2-$4)}
给出:
co1 co2 co3 co4 diff.
r1 15.2 13.0 21.4 -6.2
r2 23 15 15.7 7.3
r3 14 8 12 2.0
给定文件中的数据
data.txt
发出此命令:
awk -f so.awk data.txt
(您可能需要调整格式以满足您的具体需求)
这一行的作用:
awk 'NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
它给出:
co1 co2 co3 co4 diff.
r1 15.2 13.0 21.4 -6.2
r2 23 15 15.7 7.3
r3 14 8 12 2
如果您想通过制表符分隔字段,这就是您想要的:
awk 'BEGIN { OFS = "\t" } NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
如果没有标题,Taku Miyakawa 的一句台词可以简化:
awk '{ $5 = $2 - $4 } 1' input.txt > inputdiff.txt
或者使用制表符分隔:
awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt
我们如何做同样的事情,即减去第 2 列和第 4 列,但仅适用于第 2 至第 3 行,或者假设如果我们有更大的数据行,则假设从第 2 行到第 10 行