У меня есть файл журнала объемом 20 ГБ, в котором много полей, а номер поля или столбца 2 содержит числа. Я использую приведенные ниже команды для печати только столбца 2
zcat /path to file location/$date*/logfile_*.dat.zip | awk '/Read:ROP/' | nawk -F "=" '{print $2}'
, результат этой команды:
"93711994166", Key
, так как мне нужен только номер, я добавляю приведенную ниже команду к моему оригиналу команда для очистки вывода:
| awk -F, '{print $1}' | sed 's/"//g
'
результат:
93711994166
моя конечная цель - печатать только числа, имеющие длину, отличную от 11 цифр, поэтому я добавляю следующее к моей последней команде:
-vE '^.{11}$'
, поэтому моя последняя команда:
zcat /path to file location/$date*/logfile_*.dat.zip | awk '/Read:ROP/' | nawk -F "=" '{print $2}' | awk -F, '{print $1}' | sed 's/"//g' | grep -vE '^.{11}$' >/tmp/$file
эта команда занимает много времени для выполнения, также вызывает высокую загрузку ЦП. Я хочу добиться следующего:
- распечатать все числа длиной не равной 11 цифрам.
- распечатать все числа, которые не начинаются с 93 (независимо от их длины)
- чистая, эффективная команда, не требующая затрат на процессор или память
У меня есть еще одно требование, которое состоит в том, чтобы напечатать также числа, которые не начинались с 93
.
Примечание:
файл журнала содержит много разных строк, но я использую awk '/Read:ROP/'
для работы с приведенным ниже выводом и извлечения чисел
Read:ROP (CustomerId="93700001865", Key=1, ActiveEndDate=2025-01-19 20:12:22, FirstCallDate=2018-01-08 12:30:30, IsFirstCallPassed=true, IsLocked=false, LTH={Data=["1|
MOC|07.07.2020 09:18:58|48000.0|119||OnPeakAccountID|480|19250||", "1|RECHARGE|04.07.2020 10:18:32|-4500.0|0|0", "1|RECHARGE|04.07.2020 10:18:59|-4500.0|0|0"], Index=0
}, LanguageID=2, LastKnownPeriod="Active", LastRechargeAmount=4500, LastRechargeDate=2020-07-04 10:18:59, VoucherRchFraudCounter=0, c_BlockPAYG=true, s_PackageKeyCount
er=13, s_OfferId="xyz", OnPeakAccountID_FU={Balance=18850});