2

print Nextline の 4 番目と 5 番目の値と一致する場合、4 番目と 5 番目の値のパターンを一致させたいと考えています。

以下は入力ファイルです

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 を一致させています. 検索パターンが行で一致する場合, awk または sed を使用してすぐに次の行の 4 番目と 5 番目の値を取得する必要があります.

出力は次のようになります

66319 2857

パターンのマッチング中に重複を減らす

ありがとう

4

4 に答える 4

2

これは簡単です:

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

$4 == 17496 && $5 == 2857 {
    lastMatched = 1;
}
于 2014-12-12T00:33:40.747 に答える
1
awk '{if (flag==1) {print $4,$5; flag=0}}
     {if (($4==17496)&&($5==2857))flag=1}' inputfile

マッチが 1 つだけ必要で、後で終了したい場合は、exit を追加するだけです。

awk '{if (flag==1) {print $4,$5; exit}}
     {if (($4==17496)&&($5==2857)) flag=1}' inputfile 
于 2014-12-12T05:25:31.467 に答える
0

一致した場合はフラグを立て、フラグが立てられた場合はフラグを下げてデータを出力します。

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

ステートメントの順序は非常に重要です。最初にフラグを設定してからチェックすると$4$5同じ行に対して出力されます...

于 2014-12-12T22:08:50.493 に答える
0

以下の行で修正しました

nawk '/'$4'  '$5'/{getline;print $4,$5}'
于 2015-06-16T16:53:35.873 に答える