Можно использовать несколько awk
для получения необходимых данных.
awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
{}
данным key:value
Даже если формат изменится, шаблон должен быть идентифицирован по разделителям и соответствующим образом скорректирован.
напр.:
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
Использованиеgrep
:
{ grep -E '^(OTP )?XY:' input_file; grep -E -v '^(OTP )?XY:' input_file; } > ouput_file
2 команды grep
фильтруют input_file
с и без(-v
)нужного шаблона.
{... } > output_file
сохраняет оба вывода grep
в файл.
В GNUed
(примечание :изменяет file
на месте; для вывода отредактированного файла на стандартный вывод вместо этого измените wq
на,p q
):
printf '%s\n' 'g/^\(\|OTP \)XY:/m0' wq | ed -s file