將特定列附加到表中

將特定列附加到表中

我有幾個具有以下命名風格的表:

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和名稱的表進行分組。SCENARIO為此,我有以下循環:

for institute in wbm matsiro
do
  for scenario in rcp4p5 rcp8p5
  do
    paste "$institute"_*_"$scenario"* > "$hyd_model"_"$scenario".txt
  done
done

不幸的是,在將表附加到第一個表時,我想刪除前三列(以避免冗餘)。我知道在命令列中執行此操作:

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

相關內容