Сгруппировать и суммировать из .txt файла в Linux - PullRequest
0 голосов
/ 11 июля 2019

Следуя предложению @tripleee, я отправляю еще один вопрос о проблеме кодирования. Я пытаюсь более конкретно указать источники и ожидаемые результаты.

Мой исходный файл .txt закончилсязаполненный строками и использующий AWK, I:

  • извлекает только строки, идентифицированные конкретным кодом.
  • анализирует содержимое строки, чтобы получить только определенные значения.
  • удалить ведущие нули из подстроки.

После этих первых шагов мой сохраненный вывод выглядит следующим образом (я могу изменить порядок столбцов по своему желанию).

1646         | 01         |       1602 |          4
1646         | 01         |       1604 |         19
1646         | 01         |       1605 |         35
1646         | 01         |       1606 |          7
1646         | 01         |       1607 |         37
1646         | 01         |       1609 |          9
1646         | 01         |       1610 |          3
1646         | 01         |       1611 |          2
1646         | 01         |       1612 |         90
1646         | 01         |       1613 |        107
1646         | 01         |       1614 |         12
1646         | 01         |       1615 |         12
1646         | 01         |       1616 |          4
1646         | 01         |       1617 |          1
1646         | 01         |       1618 |         39
3625         | 01         |       2311 |         14
3625         | 01         |       2312 |          9
3625         | 01         |       2313 |         11
3625         | 01         |       2314 |          3
3625         | 01         |       2315 |          1
3625         | 01         |       2316 |          1
3625         | 01         |       2317 |         28
3625         | 01         |       2318 |          9
3625         | 01         |       2320 |         12
3625         | 01         |       2321 |          5
3625         | 01         |       2322 |         29
3625         | 01         |       2324 |          3
1646         | 06         |       1600 |         12
1646         | 06         |       1603 |         19
1646         | 06         |       1608 |         11
3625         | 06         |       2319 |          6
3625         | 06         |       2323 |         16
3547         | AF         |       1525 |          1
3547         | AF         |       1526 |          1

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

Другими словами, ожидаемый результат долженбыть:

DEP         SUM
01
    1646    381
    3625    125
06  
    1646    42
    3625    22
AF  
    3547    2

Или с лучшей презентацией:

DEP        | PDV        |            |        SUM
01         |            |            |          
           | 1646       |            |        381
           | 3625       |            |        125
06         |            |            |          
           | 1646       |            |         42
           | 3625       |            |         22
AF         |            |            |          
           | 3547       |            |          2

Пока я пробовал это:

awk '{sum[$2]+=$4}
END{for (date in sum) print date, sum[date], freq[date]}' Test_Awk_2.txt

Но результаты не те, которые я ожидал:

AF 2
01 506
06 64

1 Ответ

0 голосов
/ 11 июля 2019

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

Вы также печатаетемассив freq, но вы его никогда не назначали.Это также не существует в желаемом выводе.

awk '{sum[$2" "$1]+=$4}
     END{for (date in sum) print date, sum[date]}' Test_Awk_2.txt | sort -n -k1,2

Команда sort поместит все одинаковые значения $2 в последовательные строки.

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