Самый простой способ, который я могу придумать, это сохранить первую строку как переменную, а затем распечатать остальные по мере необходимости. Это, однако, требует сохранения всего входного файла в памяти:
#!/bin/gawk -f
{
if(NR==1){
header[1]=$1;
header[2]=$2;
for(i=3;i<=NF;i++){
header[$i]=i;
}
}
else{
data[$1][NR]=$2"\t"$(header[$1]);
}
}
END{
OFS="\t";
for(i in data){
print header[1],header[2],i > i".txt"
for(k in data[i]){
print i,data[i][k] >> i".txt"
}
}
}
Сохраните этот скрипт как foo.awk
, сделайте его исполняемым ( chmod a+x foo.awk
) и запустите это в вашем файле:
foo.awk file