Usando a variável FILENAME
do AWK:
awk 'BEGIN { OFS = "\t"; print "traj", "iter", "states", "gradient"; FS="-|\." } { gradient=$0; $0=FILENAME; print $2, $4, $6, gradient }' traj-*-iter-*-states-*.gradient
exibirá a linha de cabeçalho solicitada, processará cada arquivo traj-*-iter-*-states-*.gradient
, exibindo os valores extraídos de seu nome de arquivo e seu conteúdo.
A seguinte variante, baseada em um sugestão Olivier Dulac , extratos a linha de cabeçalho do nome do arquivo e usa uma versão mais simples de FS
:
awk 'BEGIN { OFS = "\t"; FS="[-.]" } { contents=$0; $0=FILENAME; if (!header) { print $1, $3, $5, $7; header=1 }; print $2, $4, $6, contents }' traj-*-iter-*-states-*.gradient
Você pode alterar o glob no final para corresponder aos arquivos nos quais tem interesse, e o cabeçalho será adaptado (ao primeiro arquivo processado).