Solução completa do awk :
awk 'NR==1{ len=split($0,a_pos); for(i=1;i<=len;i++) a_keys[a_pos[i]]=i }
NR>1{ if(!r[$1]++) { fn="file"++c; print "Name\tID\t"$1 > fn }
print $1,$2,$(a_keys[$1]) > fn
}' OFS='\t' file
-
len=split($0,a_pos)
- divide a primeira linha em matriz de "chaves" (matriza_pos
é indexada com números inteiros) -
for(i=1;i<=len;i++) a_keys[a_pos[i]]=i
- invertendoa_pos
no arraya_keys
, que será indexado com chaves de string (para processamento adicional) -
fn="file"++c
- construindo o nome do arquivo
Visualizando resultados:
for f in file[0-9]*; do (echo "$f"; cat "$f"; echo); done
A saída ( file1
, file2
, file3
e file4
consecutivamente):
file1
Name ID ABC12
ABC12 123456 XX
ABC12 123456 XX
file2
Name ID ABCD12
ABCD12 123456 YY
ABCD12 123456 YY
file3
Name ID ABCD123
ABCD123 123456 ZZ
ABCD123 123456 ZZ
file4
Name ID ABCD1234
ABCD1234 123456 JJ
ABCD1234 123456 JJ