次の行を取得するとしましょう。
[duration] => 92
[from] => 18884541236
[to] => 17841234568
私が望むのは、ファイル全体を検索して[送信者]番号が[受信者]番号と同じインスタンスを確認することです。
だから、次のような項目があれば
[duration] => 43
[from] => 17873332222
[to] => 17873332222
次の行では、[from]番号の直後に同じ[to]番号が続く場所をファイルから検索できます。
答え1
[to]
このコマンドは、行番号と最初のフィールドを持ち、3番目のフィールドが最後に表示された値と同じ行の内容を印刷します[from]
。
awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file
このファイルを入力として使用します。
[duration] => 92
[from] => 18884541236
[to] => 17841234568
[duration] => 43
[from] => 17873332222
[to] => 17873332222
次の結果が表示されます。
$ awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file
6 [to] => 17873332222
答え2
サンプルで見るから(危険なのは分かるが)
[duration]
決して同じではなく、[from]
常に[to]
順守されている場合、これは簡単かもしれません。
awk '$3==last{ print NR, $0} {last=$3}' file