Talvez algo como:
find . -name 'file[0-9]*_*' -type f -exec awk '
FNR == 1 {
output = FILENAME
sub(/.*\/file/, "", output)
sub(/[^0-9].*/, "", output)
output = "merge" output
}
{print > output}' {} +
Observe que find
encontra arquivos em uma ordem não especificada, portanto, os arquivos serão mesclados em uma ordem não especificada.
Observe que, se todos os arquivos para um determinado arquivo merge
estiverem vazios, o arquivo merge
não será criado. Se você preferir obter um arquivo merge
vazio nesses casos, e se seu awk
for o GNU, você pode alterar o acima para:
find . -name 'file[0-9]*_*' -type f -exec gawk '
BEGINFILE {
output = FILENAME
sub(/.*\/file/, "", output)
sub(/[^0-9].*/, "", output)
output = "merge" output
printf "" > output
}
{print > output}' {} +