Sem teste:
awk -F "\t" '
{ key = $1 FS $2 FS $3 FS $4; values[key] = values[key] FS $5 }
END { for (key in values) print key values[key] }
' file ...
O cabeçalho
Para cada arquivo, você deseja extrair parte do nome do arquivo e usá-lo como cabeçalho. Manteremos o controle do cabeçalho com uma string separada, anexando-o a cada arquivo.
awk -F "\t" '
BEGIN { header = "col1" FS "col2" FS "col3" FS "col4" }
{
key = $1 FS $2 FS $3 FS $4
values[key] = values[key] FS $5
}
FNR == 1 {
split(FILENAME, a, /_/)
header = header FS a[2]
}
END {
print header
for (key in values)
print key values[key]
}
' file ...
Inicializamos o cabeçalho no bloco BEGIN. Dê as primeiras 4 colunas, quaisquer títulos de cabeçalho que você precisar.
A variável FNR
é o número do registro do arquivo atual. Quando FNR == 1
estamos na primeira linha deste arquivo. A variável awk FILENAME
contém o nome do arquivo atualmente sendo processado.
Classificando
Se você usar o GNU awk, poderá fazê-lo no bloco END ( referência ):
END {
print header
# order the array by index, as strings, ascending
PROCINFO["sorted_in"] = "@ind_str_asc"
for (key in values)
print key values[key]
}
Se você não tem o GNU awk, você pode fazer isso:
awk '...' | {
read header
echo "$header"
sort
}