Você poderia tentar assim:
awk 'NR==1{h=$0; next}
!seen[$3]++{f="FILE_"FILENAME"_"$3".txt";print h > f}
{print >> f}' infile
O item acima salva o cabeçalho em uma variável h ( NR==1{h=$0; next} ) e, se $3 não for visto ( !seen[$3]++ , por exemplo, se for a primeira vez que encontrar o valor atual de $3 ), define nome_do_arquivo ( f=...) e escreve o cabeçalho em nome_do_arquivo ( print h > f ). Em seguida, ele anexa a linha inteira ao nome_do_arquivo ( print >> f Ele usa o padrão FS (separador de campo): branco Se você quiser usar | como FS (ou até mesmo uma regex com gnu awk ) veja cas 'comentário abaixo.