2

次のように、3 フィールド x 2 行のファイルでいくつかの計算を行ってきました。

3216.01   2724.81   1708.25
1762.48   617.436   1650.79

私の質問は、最初の行の最初のフィールドを参照し、同じ計算で 2 行目の最初のフィールドを参照するにはどうすればよいですか?

最後に、$1 (行 1) を取り、$1 (行 2) を引いてから、他の列に対して同じことを 2 乗して実行し、最後にこの値を合計することを計画しています。

4

2 に答える 2

7

この行はあなたの要件で動作します:

awk 'NR==1{for(i=1;i<=NF;i++)a[i]=$i}
NR==2{for(i=1;i<=NF;i++)s+=(a[i]-$i)^2; printf "sum: %.3f",s}' file

結果:

sum: 6557076.288

ノート

  • これは動的な列数で機能するはずですが、正確には2行です
  • 出力形式は です%.3f。必要に応じて変更できます
  • 似たような for ループ構造が 2 つあるため、コードを短くすることができます。

編集

EdMorton が提案したように、上記のコードは次のように記述できます。

awk 'NR==1{split($0,a)}
    NR==2{for(i=1;i<=NF;i++)s+=(a[i]-$i)^2; printf "sum: %.3f\n",s}' file

非常に良い提案です。私は分割について考えていませんでした... Ed に感謝します!

于 2013-08-20T10:16:46.560 に答える
3

私は通常、いくつかの一時変数でそれを話します

awk 'NR>1 {print $1-a} {a=$1}' inputfile
于 2013-08-20T10:06:11.787 に答える