2017-08-05 6 views
0

カラム$ iとカラム$((i + 33))の単純なカラム追加をしようとしていますが、構文が正しいかどうかわかりません。awkフィールド数の計算

2つのファイルが最初に貼り付けられ、次に2つのファイルに渡る列の追加が実行されます。

ありがとうございました!

paste DOS.tmp DOS.tmp2 | awk '{ printf "%12.8f",$1 OFS; for(i=2; i<33; i++) printf "%12.8f",$i+$((i+33)) OFS; if(33) printf "%12.8f",$33+$66; printf ORS}' >| DOS.tmp3 
+2

約4〜6フィールドのサンプルデータとその入力からの必要な出力をQに更新してください。 6列分の解法を知​​っているなら、大規模なデータセットを解く方法を知っています。がんばろう。 – shellter

+1

'$(i + 33)'の代わりに '$((i + 33))'のメリットは何だと思いますか? –

答えて

1

:この場合、私は例を提供しています。変数はa = 2のように定義され、print aのように使用されます。

ドル記号($) is used to refer to (input) fields。したがって、print $1は最初のフィールドを出力し、print $aは変数aで参照されるフィールドを出力します。ここでは2番目のフィールドです。同様に、print $a, $(a+3)は、第2フィールドと第5フィールドを印刷します(OFSで区切られます)。

このすべてが一緒になって、あなたのプログラムは次のようになります:

awk '{ out = sprintf("%12.8f", $1) 
     for (i=2; i<=33; i++) out = out sprintf("%s%12.8f", OFS, $i+$(i+33)) 
     print out }' numbers 

我々は最初の出力行変数outout = out valようconcatenatingにすべての値を印刷するsprintfを使用し、その後で、完全な出力レコードを印刷お知らせprint

1

あなたはfile_1file_2で列iを追加しようとしていますか? bashとは異なり、変数展開は、変数名の前にドル記号($)を必要としない、awk

paste <(seq -s' ' 33) <(seq -s' ' 33) | awk '{ for(i=1; i<=33; i++) { printf "%f",$i+$((i+33)) ; if(i!=33) printf OFS;} printf ORS}' 
関連する問題