複数のファイルに条件がある場合は、特定の列をファイルとして印刷するにはどうすればよいですか?

複数のファイルに条件がある場合は、特定の列をファイルとして印刷するにはどうすればよいですか?

次のような多くのファイル(合計2181ファイル、anacovis2_1_summary_betai_reg.outanacovis2_2181_summary_betai_reg.out)があります。

anacovis2_2_summary_betai_reg.out
anacovis2_3_summary_betai_reg.out
anacovis2_4_summary_betai_reg.out
anacovis2_5_summary_betai_reg.out
anacovis2_6_summary_betai_reg.out
anacovis2_7_summary_betai_reg.out
.
.
.
anacovis2_2179_summary_betai_reg.out
anacovis2_2180_summary_betai_reg.out
anacovis2_2181_summary_betai_reg.out

各ファイルは次のようになります。

 COVARIABLE MRK M_Pearson SD_Pearson BF(dB) Beta_is SD_Beta_is eBPis
  1       1    -0.00974041     0.21914544   -10.86437924    -0.00058189     0.00694111     0.03003007
  1       2     0.08603974     0.19711939    -1.27963044     0.00381909     0.00953539     0.16192245
  1       3    -0.02912035     0.20260353   -12.60498743    -0.00146066     0.00633105     0.08749265

各ファイル(1〜2181)を繰り返し、最初の列(COVARIABLE)が「1」の場合は、最後の列だけを印刷して別のファイルに保存したいと思います(各ファイルの出力を別々の文書)。

このタスクawkや他の提案はどうすればよいですか?

答え1

これはawk

awk '($1==1){print $NF>FILENAME"_new"}' anacovis2_{1..2181}_summary_betai_reg.out

最初の列が1に等しいことを確認してから、$1==1最後の列を$NFFILENAME形式は同じですが、で終わる新しいファイルに印刷するので、_new出力ファイルはFILENAME_new

私たちが使用しているすべての2181ファイルを読むには拡張パラメータを中括弧で囲みます。ここで。

答え2

簡単な解決策は次のとおりです。

for((i=1;i<2182;i++)); do
    file_in="anacovis2_${i}_summary_betai_reg.out"
    file_out="awk_output_${i}"
    awk '$1==1 { print $NF }' "$file_in" >"$file_out"
done

より速い解決策は、2181の代わりに1つのプロセスawkしか必要としないように入出力ファイルを開くことです...awk

関連情報