在同一行打印数据

在同一行打印数据

我使用以下命令在文件中搜索两个单词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

您可以分配给输出记录分隔符 ,ORS它隐式附加到每个打印语句。

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

这种方式将工作,因为两条数据线成对出现,一个接一个。因此,对于第一部分,我们将 ORS 设为空,将第二部分设为换行符。逗号将负责第三和第四字段之间的分隔。

相关内容