次のような多くのファイル(合計2181ファイル、anacovis2_1_summary_betai_reg.out
〜anacovis2_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
最後の列を$NF
FILENAME形式は同じですが、で終わる新しいファイルに印刷するので、_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