Я пытаюсь найти способ подсчитать количество строк, которые были обработаны при анализе входящих данных из миллионов маленьких файлов.
Пример данных, например, tab
- это разделитель:
CLIENT1.test.com /var DIR 21213412 user1 root default 2000-03-04 18:30:59.000000 PROC_MGMT
CLIENT1.test.com /usr DIR 212112 user1 root default 2006-02-11 08:30:00.000000 PROC_MGMT
CLIENT2.test.com /var/tmp/test.txt ACTIVE FILE 4000 sysuser sysuser NA 2001-04-11 03:00:09.000000 DEFAULT
CLIENT3.test.com /test.out PASSIVE FILE 4000 atuser atgroup group 2012-05-04 02:30:59.000000 AUTOMAT
CLIENT4.test.com /opt DIR 542016 dbuser dbgroup Default 2000-03-04 18:30:59.000000 SYSTEM
Мой код в настоящее время выглядит примерно так:
PATTERN="mssg1|mssg2|mssg3|...|mssgN"
SERVER=my_server_name
find <path> -type f -name "*.txt" -print0 | \
xargs -0 awk -v PAT="$PATTERN" '$0!~PAT' | \
awk '{gsub(/\t/",") {print}}' | \
awk -v SRV="$SERVER" 'BEGIN {FS=OFS=","} {$1=SRV OFS $1;} {if ($4 !~ /DIR/) $4=","$4;} {print}' | \
awk 'BEGIN {FS=OFS=","} {if ($9 == "") $9="01/01/1970 00:00:00 AM"; else {gsub("[:-]"," ",$9); $9=strftime("%m/%d%/Y %r", maketime($9))};} {print}' > /tmp/outputFile.log
Я могу сосчитать общее числострок всех входящих файлов, запустив цикл for
и wc -l
(что, я думаю, будет довольно медленно) и поместив его как yyyy
количество строк.То, что я ищу, это подсчитать количество строк, которые я уже обработал.Чтобы я мог показать что-то вроде
echo "Processed xxxx lines out of yyyy lines"
, где xxxx делится на 1000. Например:
Processed 1000 lines out of 1000000 lines.
Processed 2000 lines out of 1000000 lines.
Processed 3000 lines out of 1000000 lines.
.........
Processed 1000000 lines out of 1000000 lines.
Done.
Могу ли я добавить счетчик к операторам awk
, которые яиспользуя?
Мой код bash
основан на RHEL 6.7
.