Добавляйте значения при наличии X столбцов

$ gawk '{print > "file" ++a[$1] ".txt"}' input

# And on OSX awk, and also gawk:

$ awk '{print > ("file" ++a[$1] ".txt")}' input


$ head file*txt
==> file1.txt <==
1    Cat
2    Boy
3    Tree

==> file2.txt <==
1    Dog
2    Girl
3    Leaf

==> file3.txt <==
1    Frog
3    Branch

==> file4.txt <==
3    Trunk

edit : Объяснение. Текущая строка печатается в (> ) fileX.txt . Каждый раз, когда обнаруживается первое поле, массив a [$ 1] увеличивается на 1 перед вычислением.Это используется для определения имени файла.

редактировать 2 : У меня нет возможности проверить с помощью OSX awk, но я полагаю, что если вы наполовину серьезно относитесь к использованию awk, вам следует установить gawk или mawk . Однако вы можете попробовать следующее:

$ awk '{a[$1]++; f = "file" a[$1] ".txt"; print > f}' input

Это то же самое, но все действие разделено на отдельные шаги. Это поможет OSX awk понять правильный порядок оценки частей.

1
18.03.2019, 18:32
1 ответ
awk 'NF>=8 && NR>1 { entries++; sum+=$8 } END { print "Total for column 8:", sum, "over", entries, "records with this value present." }' inputfile
3
27.01.2020, 23:22

Теги

Похожие вопросы