
次のような命名スタイルのテーブルがいくつかあります。
INSTITUTE_MODEL_SCENARIO_RIVER.txt
例:
wbm_gfdl_rcp8p5_mississippi.txt
wbm_hadgem_rcp8p5_mississippi.txt
wbm_miroc_rcp8p5_mississippi.txt
matsiro_gfdl_rcp4p5_mississippi.txt
matsiro_ipsl_rcp8p5_mississippi.txt
ファイル名にINSTITUTE
andという名前が含まれるものをグループ化した出力テーブルを作成したいと思います。そのために、次のループを使用します。SCENARIO
for institute in wbm matsiro
do
for scenario in rcp4p5 rcp8p5
do
paste "$institute"_*_"$scenario"* > "$hyd_model"_"$scenario".txt
done
done
残念ながら、最初のテーブルにテーブルを追加する際に、最初の 3 つの列を削除したいです (冗長性を避けるため)。コマンドラインでこれを行う方法はわかっています。
paste wbm_gfdl_rcp8p5_mississippi.txt <(cut -f4 wbm_hadgem_rcp8p5_mississippi.txt) <(cut -f4 wbm_miroc_rcp8p5_mississippi.txt) > output.txt
しかし、ループ内でそれを実装することはできませんでしたfor
。ヒントがあれば歓迎します!
答え1
興味深い質問ですね。配列を使用して関連ファイルをキャプチャし、再帰関数を使用して各追加ファイルを貼り付けます。
paste_files() {
if [[ "$#" -eq 0 ]]; then
cat -
else
paste - <(cut -f4 "$1") | paste_files "${@:1}"
fi
}
for institute in wbm matsiro; do
for scenario in rcp4p5 rcp8p5; do
files=( "$institute"_*_"$scenario"* )
cat "${files[0]}" | paste_files "${files[@]:1}" > "$hyd_model"_"$scenario".txt
done
done