Выражение Awk для получения определенного шаблона из заданного ввода - PullRequest
1 голос
/ 02 января 2012

У меня есть файл pcap в качестве входных данных, и я хочу получить определенные строки из файла. Я использовал следующую команду: -

/home/rahul/vPath-dissector/binaries/wireshark-1.6.1/bin/tshark -r /home/rahul/Downloads/abc.pcap -V -x -O FTP | grep '^[0-9]\{4\}'

тогда я получил следующий вывод: -

0000  08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10   ..'.....'.....E.
0010  00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8   .4F.@.@._1......
0020  0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11   .....V.7u.......
0030  00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb   ............A...
0040  cc 93                                             ..


0000  08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10   ..'.....'.....E.
0010  00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8   .43.@.@.qn......
0020  0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10   ...V.......7u...
0030  00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15   .\..............
0040  41 94                                             A.

Я хочу вывод как: -

08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10
00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8
0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11
00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb
cc 93  


08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10
00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8
0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10
00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15
41 94

Если я печатаю строки до $ 18 или около того, используя awk, то у меня возникает проблема с последней строкой, потому что в некоторых пакетах она меньше фиксированной длины и поэтому выдает и другие строки, которые мне не нужны.

Примечание: - Между 00X0 и XX есть два пробела , а между случайной строкой в ​​конце - три пробела .

Итак, я хочу натянуть эти три пробела, а не отдыхать после них ...

Пожалуйста, помогите мне с выражением awk, которое даст мне вывод, как указано мной ....

Ответы [ 2 ]

1 голос
/ 02 января 2012

Легко, попробуйте это:

 awk -F'  +' '{print $2}' ./infile

Выход

$ awk -F'  +' '{print $2}' ./infile
08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10
00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8
0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11
00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb
cc 93


08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10
00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8
0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10
00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15

Примечание: Если у вас есть gawk, вы можетеполностью удалите команду grep и сверните ее в awk примерно так

awk --re-interval -F'  +' '/^[0-9]{4}/{print $2}' ./infile
0 голосов
/ 02 января 2012

Попробуйте использовать вырезать

xxd file | cut -d\  -f3-18

Предупреждение: не проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...