-2

例如,我正在尝试编写一个 awk one liner,它可以将第 6 列的最后一个元素减去第 5 列中的每个值

5/20/2013 1085.00 1062.25 1065.00 1083.50 -381.00 07 2013
5/21/2013 1098.25 1075.00 1080.00 1097.25 -381.00 07 2013
5/22/2013 1113.75 1089.50 1096.00 1113.25 -381.00 07 2013
5/23/2013 1165.75 1106.50 1111.00 1118.50 -381.00 07 2013
5/24/2013 1124.75 1090.25 1110.00 1095.25 -381.00 07 2013
5/28/2013 1147.50 1091.50 1094.00 1128.25 -381.00 07 2013
5/29/2013 1135.25 1119.25 1125.25 1128.75 -159.75 11 2013
5/30/2013 1133.25 1117.75 1128.25 1129.50 -159.75 11 2013
5/31/2013 1155.00 1129.00 1129.25 1144.50 -159.75 11 2013
6/3/2013 1171.50 1140.75 1141.25 1165.75 -159.75 11 2013
6/4/2013 1165.00 1144.25 1164.25 1156.25 -159.75 11 2013

我想要一个输出

1243.25
1257
1273
1278.25
1255
1288
1288.5
1289.25
1304.25
1325.5
1316
4

2 回答 2

1

这可以解决问题:

$ awk '{a[NR]=$5}END{for(i=1;i<=NR;i++)print a[i]-$6}' file
1243.25
1257
1273
1278.25
1255
1288
1288.5
1289.25
1304.25
1325.5
1316
于 2013-06-05T16:14:22.587 回答
0

反转文件,找到第一行的第 6 列做所有的减法,然后反转输出

tac file | awk 'FNR==1{key=$6} {print $5-key}' | tac

我不知道tac在 Solaris 上是否可用...

于 2013-06-05T20:13:06.697 回答