for f in rcp8p5 rcp4p5
do : >"$f.txt"
find . ! -name . -prune ! -type d -name "*_${f}_*txt" -exec \
sh -c '
printf "%s\t" YEAR MONTH DAY
printf "%.0sRES\t" "$@"; echo
sed -n "
/^[0-9]/!d;p;:n
n
/^[0-9]/s/.*[[:blank:]]//p
bn
" "$@" | paste
' -- {} + >>"$f.txt"
done
... Eu acho que eu poderia ter a idéia errada sobre o que você estava fazendo antes, e talvez isso possa compensar isso. Não tenho tanta certeza de que isso funcionará, mas, se acontecer, deve ser caminho mais rápido do que o que você está fazendo.
Basicamente find
pega uma lista de arquivos com nomes correspondentes a ...8...
ou ...4...
e os entrega em {} +
a um shell.
O shell imprime uma linha de cabeçalho começando com YEAR MONTH DAY
cada, seguido por \t
ab e depois imprime quantas colunas RES
, pois tem argumentos.
Em seguida, sed
concatena todos os argumentos do arquivo em um único fluxo e imprime a primeira linha começando com um dígito inteiro e todas as linhas que começam com um dígito que vêm depois de obter apenas o último campo impresso.
Toda a saída de sed
é passada para paste
, que substitui todos os ewlines \n
em sua entrada por \t
abs na saída.
Espero que esta versão funcione porque invocar um novo subshell e abrir um novo canal para cada arquivo da sua lista é uma idéia terrível.
Em caso afirmativo, este irá , no entanto, fazer uma nova linha em sua tabela para cada grupo de arquivos ARGMAX
- o que pode não ser uma coisa ruim, mas é facilmente manipulado depois.