Как извлечь определенный текст из файла журнала с помощью терминала Linux?

Как обычно, в админке есть много способов.

Предлагаемое мной решение выглядит следующим образом:

cd /home/me
getfacl -R /whatever > whatever-permissions.org 2> /dev/null

# A) change lines starting with      # group: root
# to                                 # group: whatineed
sed 's/^# group: root/# group: whatineed/g' whatever-permissions.org > whatever-permissions.new

# B) change lines with               group::x.y
# to                                 group::xwy
# (where x, y mean: whatever was there before)
sed 's/^group::\(.\).\(.\)/group::\1w\2/g' whatever-permissions.new > whatever-permissions.new

cd /
setfacl --restore /home/me/whatever-permissions.new
2
16.07.2017, 20:48
3 ответа

Попробуйте это:

$ awk -F\" '/amount/ {print $9}' file | sed 's/[:|,]//g'
100000
50000

ИЛИ:

$ sed 's/^.*amount\":\([0-9]*\),\".*$/\1/' file
100000
50000

РЕДАКТИРОВАТЬ

Вы можете обобщить вывод первой команды, если снова направите ее в awk, как в этом примере:

$ awk -F\" '/amount/ {print $9}' file | sed 's/[:|,]//g' |\
awk '{sum += $1} END {print sum}'
150000
1
27.01.2020, 21:53

Используйте комбинациюawk+jq(Инструмент для работы с JSON):

awk '{ print $10 }' logfile | jq -r '.amount'

Выход:

100000
50000

При таком подходе вы сможете извлекать любые/несколько ключей/значений из закодированного поля JSON -

4
27.01.2020, 21:53

Можно использовать несколько awkдля получения необходимых данных.

awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
  • первый awk приведет вас к {}данным
  • второй awk даст вамkey:value
  • третий awk даст вам значение ключа

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

напр.:

my_var="2017-07-16 01:06:07 | 8801624874139 | http://192.168.5.1:2020/credit/purchase/4 | XpressLoan | {"resultCode":0,"resultMessage":"OK","amount":100000,"serviceFee":24400,"totalOutstandingdebt":124400,"msisdn":8801624874139}"

$ echo $my_var | awk -F"|" {'print $5'}
 {resultCode:0,resultMessage:OK,amount:100000,serviceFee:24400,totalOutstandingdebt:124400,msisdn:8801624874139}

$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $4}'
serviceFee:24400

$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
100000
1
27.01.2020, 21:53

Теги

Похожие вопросы