【发布时间】:2018-09-25 12:38:27
【问题描述】:
original data and desired output
你好,
我想获取 Patterns 和 print 之间的特定变量值( REF_ID 值、C_ID 值和它前面的 Date-Time。
您可以在下面看到原始数据和所需输出:
输入:
[2018 13:50] ALI
REF_ID X
A 3
C_ID Y
B 4
[2018 14:00] ALI
C 3
REF_ID Z
D 1
E 4
C_ID T
需要输出:
[2018 13:50] X Y [2018 13:50] ALI
[2018 13:50] X Y REF_ID X
[2018 13:50] X Y A 3
[2018 13:50] X Y C_ID Y
[2018 13:50] X Y B 4
[2018 14:00] Z T [2018 14:00] ALI
[2018 14:00] Z T C 3
[2018 14:00] Z T REF_ID Z
[2018 14:00] Z T D 1
[2018 14:00] Z T E 4
[2018 14:00] Z T C_ID T
我已经尝试了以下方法,但它没有按我的意愿工作。
awk '
BEGIN {FS=" "}
{if ($0 ~ /\[2018/) {flag=1;date_ref=$1;time_ref=$2;} }
{if ($0 ~ /REF_ID/ ) {t_ref=$2} }
{if ($0 ~ /C_ID/ ) {gcid_ref=$2} }
{if (flag=1) print date_ref,time_ref,t_ref,gcid_ref,$0}
'
我得到的输出:
[2018 13:50] [2018 13:50] ALI
[2018 13:50] X REF_ID X
[2018 13:50] X A 3
[2018 13:50] X Y C_ID Y
[2018 13:50] X Y B 4
[2018 14:00] X Y [2018 14:00] ALI
[2018 14:00] X Y C 3
[2018 14:00] Z Y REF_ID Z
[2018 14:00] Z Y D 1
[2018 14:00] Z Y E 4
[2018 14:00] Z T C_ID T
要解决我认为必须将数据放入缓冲区,收集变量并合并它的问题..
你能帮我解决这个问题吗?如果你能解释你提供的代码,那将会很有帮助。
【问题讨论】:
-
那些边界线也是输入/输出的一部分?
-
那些边界线不是输入/输出的一部分。其简单的空格分隔数据
-
同意 cmets 清理您的样本数据,但 pluse-uno,因为这比一般的第一个问题要好得多。并且您实际上已经尝试在发布之前解决您的问题。我会查看 awk 中的多行记录,并参考您需要的 $3、$7、$9 等。祝您好运。
-
我已使用原始原始数据和测试所需的输出更新了帖子。
-
@Ed-Morton 任何 cmets?
标签: design-patterns awk pattern-matching