Awk 添加不同列中的值,然后按顺序排列
我正在努力实现以下目标,但我对编程这个话题完全陌生,而且我越来越疯狂。我见过许多例子,其中解释了如何求一列或几列的和,但从未解释过如何从同一行添加值。我试着用Awk 添加不同列中的值,然后按顺序排列,awk,Awk,我正在努力实现以下目标,但我对编程这个话题完全陌生,而且我越来越疯狂。我见过许多例子,其中解释了如何求一列或几列的和,但从未解释过如何从同一行添加值。我试着用awk命令做一些事情,但完全没有用 我有以下意见: 10000 4.32078125e-05 2.319742728e-05 -1.626118465e-06 2.116442767e-05 2.824876608e-06 -2.008498137e-07 1.378852315e-11 -2.461344776e-11 -1.1853
awk
命令做一些事情,但完全没有用
我有以下意见:
10000 4.32078125e-05 2.319742728e-05 -1.626118465e-06 2.116442767e-05 2.824876608e-06 -2.008498137e-07 1.378852315e-11 -2.461344776e-11 -1.185369303e-11 -4.711965783e-11 -7.488327241e-10 -1.133857758e-08
为了不被这么多的数字搞得发疯,它是这样的:
#Iteration #FpX #FpY #FpZ #FvX #FvY #FvZ #MpX #MpY #MpZ #MvX #MvY #MvZ
我需要以下输出(第一行是文本):
您可以通过
$
引用
第列(字段),例如$1
,您可以使用该列进行算术运算:
$ cat foo.input
10000 4.32078125e-05 2.319742728e-05 -1.626118465e-06 2.116442767e-05 2.824876608e-06 -2.008498137e-07 1.378852315e-11 -2.461344776e-11 -1.185369303e-11 -4.711965783e-11 -7.488327241e-10 -1.133857758e-08
10001 1 2 3 4 5 6 7 8 9 10 11 12
$ awk \
'BEGIN { printf "%-11s %-12s %-12s %-12s %-12s %-12s %-12s\n", "Iteration", "FX", "FY", "FZ", "MX", "MY", "MZ" }
NF { printf "%-11s %-12s %-12s %-12s %-12s %-12s %-12s\n", $1, $2+$5, $3+$6, $4+$7, $8+$11, $9+$12, $10+$13 }' foo.input
Iteration FX FY FZ MX MY MZ
10000 6.43722e-05 2.60223e-05 -1.82697e-06 -3.33311e-11 -7.73446e-10 -1.13504e-08
10001 5 7 9 17 19 21
如果您不需要标题,则此操作有效:
perl -lane 'push @a,$F[0];
for($i=1;$i<13;$i++){
$i+=3 if($i==4);
push @a,$F[$i]+$F[$i+3]}
print "@a"' your_file
perl-lane'push@a,$F[0];
对于($i=1;$i+1)提供输入和预期输出,下次不要害怕也展示您的努力。
perl -lane 'push @a,$F[0];
for($i=1;$i<13;$i++){
$i+=3 if($i==4);
push @a,$F[$i]+$F[$i+3]}
print "@a"' your_file
> perl -lane 'push @a,$F[0];for($i=1;$i<13;$i++){$i+=3 if($i==4);push @a,$F[$i]+$F[$i+3]}print "@a"' temp
10000 6.437224017e-05 2.6022303888e-05 -1.8269682787e-06 -3.333113468e-11 -7.7344617186e-10 -1.135043127303e-08 -4.711965783e-11 -7.488327241e-10 -1.133857758e-08