Anhängen einer bestimmten Spalte an eine Tabelle

Anhängen einer bestimmten Spalte an eine Tabelle

Ich habe mehrere Tabellen mit folgendem Benennungsstil:

INSTITUTE_MODEL_SCENARIO_RIVER.txt

als Beispiele:

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

Ich möchte eine Ausgabetabelle erstellen, die die Dateien gruppiert, die den Namen INSTITUTEund SCENARIOim Dateinamen haben. Dafür habe ich die folgende Schleife:

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

Leider möchte ich beim Anhängen der Tabellen an die erste die ersten drei Spalten entfernen (um Redundanz zu vermeiden). Ich weiß, dass ich das in der Befehlszeile tun kann:

paste wbm_gfdl_rcp8p5_mississippi.txt <(cut -f4 wbm_hadgem_rcp8p5_mississippi.txt) <(cut -f4 wbm_miroc_rcp8p5_mississippi.txt) > output.txt

Mir ist es allerdings nicht gelungen, das in die Schleife zu implementieren for. Hinweise sind willkommen!

Antwort1

Interessante Frage. Ich würde ein Array verwenden, um die relevanten Dateien zu erfassen, und eine rekursive Funktion verwenden, um jede zusätzliche Datei einzufügen:

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

verwandte Informationen