私は少し助けを求めて、進行中に学んでいます。以下のようなものがあります。何が起こるのか見せたい「ログイン」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
行全体を印刷します。