我使用以下命令在文件中搜索两个单词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 设为空,将第二部分设为换行符。逗号将负责第三和第四字段之间的分隔。