Вам нужно использовать модуль awk или оператор %
.
напр.
$ awk -F, 'BEGIN { group=0; f="0.csv"};
$1 % 10 == 0 && !seen[$1]++ {group++; f=group".csv"};
{ print >> f}' input.txt
Всякий раз, когда $1
делится без остатка на 10, он увеличивает переменную group
и обновляет имя выходного файла для соответствия.
Использование следующего входного файла:
$ cat input.txt
1, aaa, bbb,...
1, ccc, ddd,...
2, aaa, bbb,...
10, aaa, bbb,...
11, aaa, bbb,...
12, aaa, bbb,...
20, aaa, bbb,...
21, aaa, bbb,...
22, aaa, bbb,...
30, aaa, bbb,...
31, aaa, bbb,...
32, aaa, bbb,...
40, aaa, bbb,...
41, aaa, bbb,...
42, aaa, bbb,...
50, aaa, bbb,...
51, aaa, bbb,...
52, aaa, bbb,...
60, aaa, bbb,...
61, aaa, bbb,...
62, aaa, bbb,...
70, aaa, bbb,...
71, aaa, bbb,...
72, aaa, bbb,...
1000, aaa, bbb,...
Он создает следующие выходные файлы:
$ head *.csv
==> 0.csv <==
1, aaa, bbb,...
1, ccc, ddd,...
2, aaa, bbb,...
==> 1.csv <==
10, aaa, bbb,...
11, aaa, bbb,...
12, aaa, bbb,...
==> 2.csv <==
20, aaa, bbb,...
21, aaa, bbb,...
22, aaa, bbb,...
==> 3.csv <==
30, aaa, bbb,...
31, aaa, bbb,...
32, aaa, bbb,...
==> 4.csv <==
40, aaa, bbb,...
41, aaa, bbb,...
42, aaa, bbb,...
==> 5.csv <==
50, aaa, bbb,...
51, aaa, bbb,...
52, aaa, bbb,...
==> 6.csv <==
60, aaa, bbb,...
61, aaa, bbb,...
62, aaa, bbb,...
==> 7.csv <==
70, aaa, bbb,...
71, aaa, bbb,...
72, aaa, bbb,...
==> 8.csv <==
1000, aaa, bbb,...
Альтернативой простому увеличению group
является приравнивание его к $1 / 10
. например.
$ awk -F, '{ group = int($1 / 10); f=group".csv" ; print >> f }' input.txt
если вы хотите указать n
в командной строке вместо жесткого -кодирования:
$ awk -F, 'BEGIN { group=0; f="0.csv"};
$1 % n == 0 && !seen[$1]++ {group++; f=group".csv"};
{ print >> f}' n=5 input.txt
Кто-то из нашей команды нашел этот патч:
Экспортировать gpio _имя _в _описание ()в модульный код GPIO
Таким образом, мы не единственные, кто хотел бы эту функцию.