在 Unix 中展平记录
Flattening records in Unix
如何通过组合 2 行并拆分另一行来在 UNIX 中展平记录?
文件中有一组记录需要展平。
IMP*1000*000***12>D>1*N*A*Y*I~
HO*DK>4019*DF>25002~
IMP*1001*000***12>D>1*N*A*Y*I~
HO*DK>25000*DF>4139*DF>4019*DF>29631*DF>311*DF>4289*DF>42731~
IMP*1002*000***12>D>1*N*A*Y*I~
HO*DK>412*DF>4289*DF>2449*DF>4019~
输出应该类似于
1000|1|DK|4019|
1000|2|DF|25002|
1001|1|DK|25000|
1001|2|DF|4139|
1001|3|DF|4019|
1001|4|DF|29631|
1001|5|DF|311|
1001|6|DF|4289|
1001|7|DF|42731|
1002|1|DK|412|
1002|2|DF|4289|
1002|3|DF|2449|
1002|4|DF|4019|
输出中的第二个字段是序列号。有办法实现吗?
感谢您的帮助。
这是一个识别和存储来自每对行的第一行的代码的问题,以便在每个输出行上继续使用从每对行的第二行解析的各个值。如果我们在开始时将字段分隔符设置为 *
,将输出字段分隔符设置为 |
,代码会更简洁。
BEGIN { FS = "*"; OFS = "|" }
/^IMP/ { code = }
/^HO/ { for (i = 2; i <= NF; i++) {
sub("~","",$i)
split($i,x,">")
print code,(i-1),x[1],x[2] "|"
}
}
...给定问题中显示的输入,产生输出:
11824393C1054263R0|1|DK|4019|
11824393C1054263R0|2|DF|25002|
11747326C1038424R0|1|DK|25000|
11747326C1038424R0|2|DF|4139|
11747326C1038424R0|3|DF|4019|
11747326C1038424R0|4|DF|29631|
11747326C1038424R0|5|DF|311|
11747326C1038424R0|6|DF|4289|
11747326C1038424R0|7|DF|42731|
11972831C1024443R0|1|DK|412|
11972831C1024443R0|2|DF|4289|
11972831C1024443R0|3|DF|2449|
11972831C1024443R0|4|DF|4019|
...根据需要。
如何通过组合 2 行并拆分另一行来在 UNIX 中展平记录?
文件中有一组记录需要展平。
IMP*1000*000***12>D>1*N*A*Y*I~
HO*DK>4019*DF>25002~
IMP*1001*000***12>D>1*N*A*Y*I~
HO*DK>25000*DF>4139*DF>4019*DF>29631*DF>311*DF>4289*DF>42731~
IMP*1002*000***12>D>1*N*A*Y*I~
HO*DK>412*DF>4289*DF>2449*DF>4019~
输出应该类似于
1000|1|DK|4019|
1000|2|DF|25002|
1001|1|DK|25000|
1001|2|DF|4139|
1001|3|DF|4019|
1001|4|DF|29631|
1001|5|DF|311|
1001|6|DF|4289|
1001|7|DF|42731|
1002|1|DK|412|
1002|2|DF|4289|
1002|3|DF|2449|
1002|4|DF|4019|
输出中的第二个字段是序列号。有办法实现吗?
感谢您的帮助。
这是一个识别和存储来自每对行的第一行的代码的问题,以便在每个输出行上继续使用从每对行的第二行解析的各个值。如果我们在开始时将字段分隔符设置为 *
,将输出字段分隔符设置为 |
,代码会更简洁。
BEGIN { FS = "*"; OFS = "|" }
/^IMP/ { code = }
/^HO/ { for (i = 2; i <= NF; i++) {
sub("~","",$i)
split($i,x,">")
print code,(i-1),x[1],x[2] "|"
}
}
...给定问题中显示的输入,产生输出:
11824393C1054263R0|1|DK|4019|
11824393C1054263R0|2|DF|25002|
11747326C1038424R0|1|DK|25000|
11747326C1038424R0|2|DF|4139|
11747326C1038424R0|3|DF|4019|
11747326C1038424R0|4|DF|29631|
11747326C1038424R0|5|DF|311|
11747326C1038424R0|6|DF|4289|
11747326C1038424R0|7|DF|42731|
11972831C1024443R0|1|DK|412|
11972831C1024443R0|2|DF|4289|
11972831C1024443R0|3|DF|2449|
11972831C1024443R0|4|DF|4019|
...根据需要。