У меня файлы журналов не менее 100Гб. Структура каталогов файла журнала похожа на эту :
drwxrwxr-x 2 griyn griyn 4096 Jul 2 14:33 lcdc-0615-00.log
drwxrwxr-x 2 griyn griyn 4096 Jun 29 14:22 lcdc-0615-01.log
drwxrwxr-x 2 griyn griyn 4096 Jun 28 21:25 lcdc-0615-02.log
drwxrwxr-x 2 griyn griyn 4096 Jun 28 21:25 lcdc-0615-03.log
drwxrwxr-x 2 griyn griyn 4096 Jun 28 21:25 lcdc-0615-04.log
drwxrwxr-x 2 griyn griyn 4096 Jun 28 21:25 lcdc-0615-05.log
drwxrwxr-x 2 griyn griyn 4096 Jun 28 21:25 lcdc-0615-06.log
И в каждом каталоге
[griyn@cp01-vm-griyn test_data]$ cd lcdc-0615-00.log/
[griyn@cp01-vm-griyn lcdc-0615-00.log]$ ll
total 361216
-rw-rw-r-- 1 griyn griyn 184936785 Jun 28 21:19 yq01-spi-mx0.yq01
-rw-rw-r-- 1 griyn griyn 184936680 Jun 28 21:20 yq01-spi-mx22.yq01
содержимое файла журнала здесь,
1 peer_addr[yq01-spi-mx38:29129]
2 peer_addr[yq01-spi-mx38:29129]
3 peer_addr[yq01-ps-beehive-agent3677:29082]
4 peer_addr[yq01-spi-mx38:29129]
5 peer_addr[yq01-spi-mx38:29129]
6 peer_addr[yq01-spi-mx38:29129]
7 peer_addr[yq01-ps-beehive-agent3677:29082]
8 peer_addr[yq01-spi-mx38:29129]
9 peer_addr[yq01-spi-mx38:29129]
10 peer_addr[yq01-ps-beehive-agent3677:29082]
11 peer_addr[yq01-spi-mx38:29129]
12 peer_addr[yq01-ps-beehive-agent3677:29082]
13 peer_addr[yq01-spi-mx38:29129]
14 peer_addr[yq01-ps-beehive-agent3677:29082]
15 peer_addr[yq01-spi-mx38:29129]
16 peer_addr[yq01-spi-mx38:29129]
17 peer_addr[yq01-ps-beehive-agent3677:29082]
18 peer_addr[yq01-spi-mx38:29129]
19 peer_addr[yq01-spi-mx38:29129]
20 peer_addr[yq01-ps-beehive-agent3677:29082]
21 peer_addr[yq01-spi-mx38:29129]
22 peer_addr[yq01-ps-beehive-agent3677:29082]
23 peer_addr[yq01-spi-mx38:29129]
Я хочу подсчитать частоту имен машин в нескольких файлах журнала с помощью сценария оболочки. Я использую AWK так:
awk -F'[]:[]' '/peer_addr/{map[$2]+=1} END{for(key in map) {sum+=map[key];printf("%-15s %s\n", key, map[key]);} print "sum:",sum}' ${log_file_dir}/${log_path} >> ./conclusion/sum.log &
Видимо, нам нужна структура карты для сохранения и обновления результата. Тогда у меня есть проблема, что структура карты в AWK просто используется в собственном AWK. Я не могу суммировать результат в нескольких файлах журнала.
Мое временное решение - использовать AWK для вывода результатов каждого файла журнала в один файл, а затем снова использовать AWK для этого файла, чтобы суммировать результат.
У вас есть более эффективный подход?
awk '{...}' <file1> <file2> <file3> ...
. - person kvantour   schedule 02.07.2018awk
с помощьюfind ... exec cat {} \; | awk ...
- person Mark Setchell   schedule 02.07.2018exec cat {} +
, если ваша находка поддерживает его). - person Ed Morton   schedule 02.07.2018