
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 INSTITUTE
und SCENARIO
im 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