awkに変数を保存する方法は?

awkに変数を保存する方法は?

ファイル名と結果をどのように印刷できますか1/2*(a+b)a2行目の最初のフィールドはどこにあり、b最後の行の最初のフィールドはどこにありますか?値を変数に定数として保存する方法がわかりません。非常にありがとう

awk -v a=$(NR==2{print $1}) b=$(END(print $1)) '{print FILENAME, 1/2*(a+b)}' rv*.out 

ファイル1

4 5 6
14545.5886 2 6
2 3 5
45457.5462 8 6

ファイル2

1 2 
34441.4545 8
6 8
8 8 
54447.4545 1

出力:

for file in test1.txt test2.txt; do 
    awk ' (NR==2){a=$1} END{print FILENAME, 1/2*(a+$1)}' "$file" >> stredni.txt; 
done

test1.txt 7272.79
test2.txt 17220.7

望ましい結果:

test1 30001.5674
test2 44444.4545

答え1

構文var=$(something)はシェル構文でawkはなく、「コマンドを実行してsomething結果をシェル変数に保存する$var」ことを意味します。 etcはawkステートメントなawkので、何らかの方法でスクリプトに接続すると予想しているようです。NR==2それは動作しません。

このコマンドは、予想される出力を印刷します。

$ for file in file1 file2; do 
    awk ' (NR==2){a=$1} END{print FILENAME, 1/2*(a+$1)}' "$file"; 
  done
file1 30001.6
file2 44444.5

awkGNU()を使用してgawkこれを行うこともできます。

$ gawk 'FNR==2{a=$1}ENDFILE{print FILENAME, 1/2*(a+$1)}' file1 file2
file1 30001.6
file2 44444.5

答え2

for i in  "p.txt" "l.txt"; do co=`wc -l $i| awk '{print $1}'`; awk -v co="$co" 'NR==2{a=$1}NR==co{b=$1}END{print FILENAME,1/2*(a+b)}' $i; done

出力

p.txt 30001.6
l.txt 44444.5

関連情報