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
-заголовок строка
f=0
-флаг, указывающий на момент печати строки заголовка в следующий новый файл
c=1
-Суффикс имени файла (увеличивается для каждого нового файла)
a[$5]
-индексирующий массив a
с уникальными значениями 5-го поля
if(length(a)>3) { f=0;c++; delete a }
-инициализация следующего нового имени файла(c++
)при следующих 3 уникальных значениях.(delete a
-удалить все элементы из массиваa
)
fn="file"c".txt"
-текущее имя файла
Просмотр результатов:
for f in file[0-9]*.txt; do echo "$f"; cat "$f"; echo; done
Выход:
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