Solução
awk :
awk -F'|' 'NR==1{ h=$0; f=0; c=1 }NR>1{
a[$5]; if(length(a)>3) { f=0;c++; delete a };
fn="file"c".txt"; if(!f) print h > fn; print > fn; f++
}' file
-
h=$0
- cabeçalho linha
-
f=0
- sinalizador apontando para o momento da impressão da linha de cabeçalho no próximo novo arquivo
-
c=1
- sufixo do nome do arquivo (incrementado para cada novo arquivo)
-
a[$5]
- matriz de indexação a
com valores exclusivos do 5º campo
-
if(length(a)>3) { f=0;c++; delete a }
- iniciando o próximo novo nome de arquivo ( c++
) ao obter 3 valores exclusivos. ( delete a
- elimina itens do array a
)
-
fn="file"c".txt"
- nome de arquivo atual
Visualizando resultados:
for f in file[0-9]*.txt; do echo "$f"; cat "$f"; echo; done
A saída:
file1.txt
C1|C2|C3|C4|C5|C6
0|1|2|3|0-1-2-3|4
0|2|2|4|0-1-2-3|5
0|1|2|3|1-3-2-4|4
0|1|2|3|1-1-3-4|4
0|1|2|3|1-1-3-4|5
file2.txt
C1|C2|C3|C4|C5|C6
0|1|2|3|4-5-2-6|4
0|1|2|3|4-5-2-6|6
0|4|5|3|7-4-2-4|4
0|1|2|3|7-4-2-5|4
0|1|2|3|7-4-2-5|5
0|1|2|3|7-4-2-5|6
file3.txt
C1|C2|C3|C4|C5|C6
0|1|2|3|7-5-2-6|5