我有下面的输入(一千行)。我需要一个sed命令将重复的行合并到相同的前三个字段中,这三个字段只添加不同的字段或删除"N/A":
D04005;4;279;0;0;SSM-4-1
D04005;5;40;0;0;SSM-5-1
LE040A;1;363;(26.3);N/A;SM-1-1
LE040A;1;363;(27.4);N/A;SM-1-2预期产出:
D04005;4;279;0;0;SSM-4-1
D04005;5;40;0;0;SSM-5-1
LE040A;1;363;(26.3);(27.4);SM-1-1/SM-1-2发布于 2015-06-30 19:30:42
TXR:
@(repeat)
@ (cases)
@id;@f2;@f3;@val1;@nil;@sm1
@id;@f2;@f3;@val2;@nil;@sm2
@ (do (put-line `@id;@f2;@f3;@val1;@val2;@sm1/@sm2`))
@ (or)
@line
@ (do (put-line line))
@ (end)
@(end)
$ txr data.txr data
D04005;4;279;0;0;SSM-4-1
D04005;5;40;0;0;SSM-5-1
LE040A;1;363;(26.3);(27.4);SM-1-1/SM-1-2发布于 2015-06-30 22:35:19
sed -r ':a;N;s!;N/A!!g;s/^(([^;]*;){3})(.*)\n\1/\1\3;/;T;s!^(([^S][^;]*;){3,})(S*SM-[^;]*);(([^S][^;]*;){1,})(.*)!\1\4\3/\6!;ta' inputfile尽管对输出中只有6个字段的注释的隐含数学表示只有对,但这是一个循环版本,在匹配时会更改输出SM-1-1/SM-1-2。
https://unix.stackexchange.com/questions/213121
复制相似问题