awkを使用してファイルのn番目の列を印刷するには?

awkを使用してファイルのn番目の列を印刷するには?

同様のデータ(input1、input2など)を持つn個のファイルがあり、このファイルの2番目の列(呼び出し)を含む新しいファイルを作成したいと思います。私が使うなら

awk '{print $2}' input{1..n} >> out

次に、入力ファイルの2番目の列にあるすべての項目を含む列を取得します。$1in out = input1、in out = input2、out = input3、....、out = inputnなど、さまざまなファイルに対して異なる列を設定するにはどうすればよいですか?$2$2$2$3$2$n$2

答え1

BEGIN次のステートメントを使用して、ステートメントですべての操作を実行できます。getline

awk '
  BEGIN {
    while(1) {
      line = sep = ""
      for (i = 1; i < ARGC; i++) {
        if ((getline < ARGV[i]) <= 0) exit
        line = line sep $2
        sep = OFS
      }
      print line
    }
  }' input{1..n} > out

答え2

paste2番目の列をすべて合わせるコマンドを作成できます。

cmd="paste"
for x in input{1..n}; do
   cmd="$cmd <(awk '{print \$2;}' $x)"
done
echo $cmd
eval $cmd

答え3

pr私はデータを劣化させるように設計されたこのツールを使います。

awk '{print $2}' input{1..n} | pr -t --columns=n > out

これは、各ファイルの行数が等しいと仮定します。

答え4

これを使う郵便はがき 参考

awk '{a[FNR] = a[FNR]" " $2}END{for(i=1;i<=FNR;i++) print a[i]}' input{1..n}

配列は異なるファイルの各行を保持します。

FNR 現在の入力ファイルから読み取られたレコードの数。各ファイルの先頭でゼロに設定されます。

END{for(i=1;i<FNR;i++) print a[i]} 

ファイルの末尾に配列aの内容を印刷します。

関連情報