1 votes

Ajouter une colonne spécifique à un tableau

J'ai plusieurs tables avec le style de dénomination suivant :

INSTITUTE_MODEL_SCENARIO_RIVER.txt

à titre d'exemple :

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

Je veux construire un tableau de sortie regroupant ceux qui ont la INSTITUTE y SCENARIO dans le nom du fichier. Pour cela, j'ai la boucle suivante :

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

Malheureusement, en ajoutant les tableaux au premier, je veux me débarrasser des trois premières colonnes (pour éviter la redondance). Je sais le faire en ligne de commande :

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

Mais je n'ai pas réussi à mettre cela en place dans le for boucle. Tous les conseils sont les bienvenus !

1voto

Todd Gamblin Points 101

Question intéressante. J'utiliserais un tableau pour capturer les fichiers pertinents, et j'utiliserais une fonction récursive pour coller chaque fichier supplémentaire :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X