発生回数を見つけ、最初の結果のフラグメントで次の発生を見つけます。

発生回数を見つけ、最初の結果のフラグメントで次の発生を見つけます。

私は少し助けを求めて、進行中に学んでいます。以下のようなものがあります。何が起こるのか見せたい「ログイン」Log1から「処理された請求書」ログ1に。検索値の使用 - 44.正直なところ、私はテストのようなものをだまそうとしているように見えますが、そうではありません。私はファイルを分解して学ぶことを望むのが初めてです。

ファイル.txt

Log0 | 20191104 | 01 | Logged In - 55
Log1 | 20191104 | 04 | Logged In - 44
Log2 | 20191104 | 03 | Logged In - 33
Log1 | 20191104 | 02 | Received Bill
Log1 | 20191104 | 02 | Accepted Bill
Log2 | 20191104 | 05 | Logged Out - 33
Log1 | 20191104 | 33 | Processed Bill
Log0 | 20191104 | 44 | Broken Bill

目的の出力を見つけます。

Log1 | 20191104 | 04 | Logged In - 44
Log1 | 20191104 | 33 | Processed Bill

ベストアンサー1

Perlソリューション:

perl -F'/\|/' -ne '$id = $F[0] if $F[3] =~ /- 44$/;
                   print if $F[0] eq $id && $F[3] =~ /Logged In|Processed Bill/;
                  ' -- file.txt
  • -n入力を1行ずつ読みます。
  • -F与えられた正規表現の各入力行を配列@Fに分割します。
  • つまり$F[3]、4番目の列が一致すると、- 44最初の列がに保存されます$id
  • $id最初の列が同じで、4番目の列がまたはに一致Logged Inする場合は、Processed Bill行全体を印刷します。

おすすめ記事