Anexa coluna específica a uma tabela

1

Eu tenho várias tabelas com o seguinte estilo de nomeação:

INSTITUTE_MODEL_SCENARIO_RIVER.txt

como exemplos:

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

Eu quero criar uma tabela de saída agrupando as que tiverem o nome INSTITUTE e SCENARIO no nome do arquivo. Para isso eu tenho o seguinte loop:

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

Infelizmente, ao anexar as tabelas ao primeiro, quero me livrar das três primeiras colunas (para evitar redundância). Eu sei fazer isso na linha de comando:

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

Mas eu não consegui implementar isso no loop for . Qualquer sugestão é bem vinda!

    
por steve 07.10.2015 / 18:08

1 resposta

1

Pergunta interessante. Eu usaria uma matriz para capturar os arquivos relevantes e usar uma função recursiva para colar cada arquivo adicional:

paste_files() {
    if [[ "$#" -eq 0 ]]; then
        cat -
    else
        paste - <(cut -f4 "") | 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
    
por glenn jackman 07.10.2015 / 18:26