7

ファイルの特定の列を出力する必要があるシェル スクリプト ファイルを作成しています。だから私は awk を使用しようとします。列番号はスクリプトで計算されます。Nprop は、1 から 8 まで変化する for ループ内の変数です。

avg=1+3*$nprop
awk -v a=$avg '{print $a " " $a+1 " " $a+2}' $filename5 >> neig5.dat

私も次のことを試しました:

awk -v a=$avg '{print $a " " $(a+1) " " $(a+2) }' $filename5 >> neig5.dat

これにより、常に最初の 3 列が印刷されます。

4

4 に答える 4

4
avg=1+3*$nprop

これは、たとえば 4 の場合、文字どおり に設定$avgされます。その式を評価する必要があります。1+3*4$prop

avg=$(( 1+3*$nprop ))

そして、awk括弧付きのスクリプトのバージョンを使用してください。

于 2013-05-02T14:38:07.193 に答える
1
awk -v n="$nprop" 'BEGIN{x=3*n} {a=x; print $++a, $++a, $++a}' file

ファイルのパスごとにシード値 (nprop) を増やし、ファイルを 8 回処理するだけの場合は、外部ループを取り除き、次のようにします。

awk 'BEGIN{for (i=2;i<=8;i++) ARGV[++ARGC] = ARGV[1]} {a=3*NR/FNR; print $++a, $++a, $++a}' file

GNU awk では、NR/FNR を ARGIND に置き換えることができます。

于 2013-05-02T16:34:14.423 に答える