次のコマンドを使用して、ファイルから2つの単語を検索しますgrep
。
grep "ADDR|USCDB" VLR.txt |awk -F" " '{print $3 " " $4}' > prueba.txt
出力は次のとおりです
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000022";%%
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000023";%%
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000024";%%
私が達成したいのは、日付と結果を同じ行に表示することです。
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000022";%%
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000023";%%
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000024";%%
答え1
USCDB
各行の前には常に次が付いているとしますADDR
。
awk '$2 == "USCDB" { date = $3 " " $4 } $4 ~ /^ADDR=/ { print date, $3, $4 }' input
date
行が見つかるたびに、変数USCDB
に日付が保存されます。行が見つかると、ADDR
この値はフィールド3と4と共に出力されます。
ADDR
USCDB
また、2つの文字列を一致させ、行全体で一致させるのではなく、特定のフィールドでのみ一致させることについても厳密です。
テストするデータがないため、コードはテストされていません(スクリーンショットがありましたが、今は失われました)。
答え2
出力にレコード区切り文字を割り当てることができ、ORS
これは各印刷ステートメントに暗黙的に追加されます。
grep .... |
awk '{
ORS = ORS == "\n" ? "" : "\n"
print $3, $4
}'
この方法は、2つのデータラインが順番にペアになっているために機能します。したがって、最初の部分ではORSを空白に設定し、2番目の部分は改行に設定しました。カンマは、3番目と4番目のフィールドを区別するのに役立ちます。