awk сопоставляет шаблоны поиска и сразу же печатает 4-е и 5-е значения следующей строки

Я хочу сопоставить шаблон 4-го и 5-го значения, если они соответствуют печати 4-го и 5-го значения Nextline.

Ниже входной файл

Кот

CL3-A3-2  0    0 17496  2851 P-VOL PAIR ASYNC      0  2850 -
CL3-C2-5  0    0 66319  2850 S-VOL PAIR ASYNC      0  2851 -
CL3-A3-2  0    1 17496  2852 P-VOL PAIR ASYNC      0  2851 -
CL3-C2-5  0    1 66319  2851 S-VOL PAIR ASYNC      0  2852 -
CL3-A3-2  0    2 17496  2853 P-VOL PAIR ASYNC      0  2852 -
CL3-C2-5  0    2 66319  2852 S-VOL PAIR ASYNC      0  2853 -
CL3-A3-2  0    6 17496  2857 P-VOL PAIR ASYNC      0  2857 -
CL3-C2-5  0    3 66319  2857 S-VOL PAIR ASYNC      0  2857 -
CL3-A3-2  0    6 47496  2857 P-VOL PAIR ASYNC      0  2857 -
CL3-C2-5  0    3 18496  2857 S-VOL PAIR ASYNC      0  2857 -

Например: я сопоставляю 17496 и 2857, если шаблон поиска совпадает в строке, нужно получить 4-е и 5-е значение непосредственной следующей строки, используя awk или sed, это нормально.

вывод будет как

66319 2857

Которые уменьшают мое дублирование при сопоставлении с образцом

Спасибо


person skmohan    schedule 11.12.2014    source источник
comment
Добро пожаловать в СО! Пожалуйста, используйте функцию кавычек для содержимого вашего входного файла, чтобы новые строки были четко видны.   -  person toddlermenot    schedule 12.12.2014


Ответы (4)


Это просто:

lastMatched {
    print $4, $5;
    lastMatched = 0;
}

$4 == 17496 && $5 == 2857 {
    lastMatched = 1;
}
person Rafe    schedule 12.12.2014

awk '{if (flag==1) {print $4,$5; flag=0}}
     {if (($4==17496)&&($5==2857))flag=1}' inputfile

Если вам нужно только одно совпадение и вы хотите завершить после этого, просто добавьте выход.

awk '{if (flag==1) {print $4,$5; exit}}
     {if (($4==17496)&&($5==2857)) flag=1}' inputfile 
person Ajay A    schedule 12.12.2014

Если я вижу совпадение, я поднимаю флаг, если флаг поднят, я опускаю флаг и печатаю данные.

% awk 'p==1{p=0;print $4, $5} $4==17496&&$5==2857{p=1}' your.data
66319 2857
%

Порядок операторов имеет решающее значение, если бы я сначала установил флаг, а затем проверил его, я бы напечатал $4 и $5 для одной и той же строки...

person gboffi    schedule 12.12.2014

Я только что исправил это с помощью строки ниже

nawk '/'$4'  '$5'/{getline;print $4,$5}'
person skmohan    schedule 16.06.2015