Как к grep конкретному слову рядом с определенным ключевым словом?

Содержание файла:

ST*810*1591754~BIG*20180826*00007201948*20180816*8708251***PR~CUR*SE*USD~N1*ST*RENT-A-CENTER #00842*ZZ*00842~N3*801 E. WM. CANNON~N4*AUSTIN*TX*78745*US~N1*BT*RENT-A-CENTER~N3*5501 HEADQUARTERS DR~N4*PLANO*TX*75024*USA~REF*ZA*1527~ITD*ZZ*3*0*20180826*0*20180925*30*000****Net 30 Days~DTM*011*20180826~FOB*PP*ZZ*AUSTIN, TX 78745~IT1*4*1*EA*273.00*QR*IN*100023757*VP*M84241~IT1*1*3*EA*90.66*QR*IN*100023415*VP*M91X42~IT1*2*1*EA*560.82*QR*IN*100022553*VP*3220217/66~TDS*110580~ISS*5*EA~SE*19*1591754~

Вывод:

filename,00007201948,8708251,1527

'*' разграниченный файл является содержанием. БОЛЬШОЙ одно из моего ключевого слова, "BIG*20180826*00007201948*20180816*8708251*", мне нужна команда для печати 'имени файла, 00007201948,8708251,1527', grep 'БОЛЬШОЕ' ключевое слово и Потребность распечатать данные между 2-м к 3-й звездочке и 4-й звездочкой к 5-й звездочке. И "REF*ZA*1527 ~" 'ЗОНА ДЕЙСТВИЙ' является другим ключевым словом, чтобы заставить следующие символы между звездочкой (*) наклоняться (~).

-1
задан 26 September 2018 в 19:07

1 ответ

С awk: используйте ~ в качестве разделитель записей и * как разделитель полей :

awk -F'*' -v RS='~' -v OFS=, '
    $1 == "BIG" {a = $3; b = $5} 
    $2 == "ZA"  {c = $3} 
    END {print FILENAME, a, b, c}
' file
<час>

Примечание, которое это - то, как awk видит файл:

$ awk -v RS='~' -F'*' '{print NR, NF, [111]}' file
1 3 ST*810*1591754
2 8 BIG*20180826*00007201948*20180816*8708251***PR
3 3 CUR*SE*USD
4 5 N1*ST*RENT-A-CENTER #00842*ZZ*00842
5 2 N3*801 E. WM. CANNON
6 5 N4*AUSTIN*TX*78745*US
7 3 N1*BT*RENT-A-CENTER
8 2 N3*5501 HEADQUARTERS DR
9 5 N4*PLANO*TX*75024*USA
10 3 REF*ZA*1527
11 13 ITD*ZZ*3*0*20180826*0*20180925*30*000****Net 30 Days
12 3 DTM*011*20180826
13 4 FOB*PP*ZZ*AUSTIN, TX 78745
14 10 IT1*4*1*EA*273.00*QR*IN*100023757*VP*M84241
15 10 IT1*1*3*EA*90.66*QR*IN*100023415*VP*M91X42
16 10 IT1*2*1*EA*560.82*QR*IN*100022553*VP*3220217/66
17 2 TDS*110580
18 3 ISS*5*EA
19 3 SE*19*1591754
20 1 

20-я запись содержит 1 поле, которое является новой строкой в конце файла.

1
ответ дан 23 September 2019 в 00:14

Другие вопросы по тегам:

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