awk, чтобы сделать группу по сумме столбца - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть этот CSV-файл, и я пытаюсь написать сценарий оболочки для вычисления суммы столбца после выполнения группирования по нему. Номер столбца 11 (СТАТУС)

Мой скрипт

awk -F, 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' $f > $parentdir/outputfile.csv;

Ожидается вывод файла

COMMITTED 2

, но фактический выход составляет всего 2.

Он печатает только счет, а не группу по сумме. Если я удаляю другие столбцы и запускаю тот же запрос, он работает нормально, но не с приведенными ниже примерами данных.

FILE NAME;SEQUENCE NR;TRANSACTION ID;RUN NUMBER;START EDITCREATION;END EDITCREATION;END COMMIT;EDIT DURATION;COMMIT DURATION;HAS DEPENDENCY;STATUS;DETAILS
Buldhana_Refinesource_FG_IW_ETS_000001.xml;1;4a032127-b20d-4fa8-9f4d-7f2999c0c08f;1;20180831130210345;20180831130429638;20180831130722406;140;173;false;COMMITTED;
Buldhana_Refinesource_FG_IW_ETS_000001.xml;2;e4043fc0-3b0a-46ec-b409-748f98ce98ad;1;20180831130722724;20180831130947144;20180831131216693;145;150;false;COMMITTED;

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

измените FS на ; в вашем скрипте

awk -F';' 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' file

COMMITTED 2
0 голосов
/ 06 сентября 2018

Вы используете неправильный разделитель полей. Используйте

awk -F\;

; необходимо экранировать, чтобы использовать его как литерал. Кроме этого, ваш подход кажется нормальным.


Помимо awk, вы также можете использовать

tail -n +2 $f | cut -f11 -d\; | sort | uniq -c

или

datamash --header-in -t \; -g 11 count 11 < $f

сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...