使用awk或bash减去两列的值

使用awk或bash减去两列的值,bash,awk,Bash,Awk,我有一些文本文件,如下所示。我想减去第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

我有一些文本文件,如下所示。我想减去第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
如果要按选项卡分隔字段,请选择以下内容:

awk 'BEGIN { OFS = "\t" } NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt

awk'BEGIN{OFS=“\t”}NR==1{$5=“diff.”}NR>=3{$5=$2-$4}1'如果没有标题,可以简化Taku Miyakawa的一行程序:

awk '{ $5 = $2 - $4 } 1' input.txt > inputdiff.txt
或使用制表符分隔:

awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt
awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt