同じ行にデータを印刷する[閉じる]

同じ行にデータを印刷する[閉じる]

次のコマンドを使用して、ファイルから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と共に出力されます。

ADDRUSCDBまた、2つの文字列を一致させ、行全体で一致させるのではなく、特定のフィールドでのみ一致させることについても厳密です。

テストするデータがないため、コードはテストされていません(スクリーンショットがありましたが、今は失われました)。

答え2

出力にレコード区切り文字を割り当てることができ、ORSこれは各印刷ステートメントに暗黙的に追加されます。

grep .... |
awk '{
  ORS = ORS == "\n" ? "" : "\n"
  print $3, $4
}'

この方法は、2つのデータラインが順番にペアになっているために機能します。したがって、最初の部分ではORSを空白に設定し、2番目の部分は改行に設定しました。カンマは、3番目と4番目のフィールドを区別するのに役立ちます。

関連情報