linux合并第一列相同的行,linux – 合并重复的行并在最后添加“N / A...

{ nl -s\; -w1 -ba |

sort -t\; -k2,2 |

sed -e:n -e'h;$!N' \

-e's/^\([^;]*\(;[^;]*;\).*\)\n[^;]*\2/\1;/;tn' \

-ex -e:N \

-e's/;/;/6p;tD' \

-e's|$|;N/A|;tN'\

-e:D -ex -eD |

sort -t\; -nk1,1 |

cut -d\; -f2-;

} out

所以有一条巨大的管道.它的工作原理如下:

> nl对所有输入行进行编号,并在其行号后跟一个插入的-separator字符串;分号.

>对输入中的2cd;分号分隔字段进行排序 – 这是您的第一个字段.

> sed递归地合并具有相同第一个字段的输入行,然后以递归方式将字符串; N / A附加到每个行的尾部,直到它至少有6个字段.

>排序在第一个字段上再次排序,这次按数字排序 – 按照nl最初计算的顺序重新排列输入.

> cut切掉最初由nl插入的行号和分隔符.

OUTPUT:

302C21;tSMe;2;346;SM-1-3/SM-1-4;N/A

S123C;1.17;3;2225;20225;N/A

SIEV1;tSMe;1;3;SM-1-1/SM-1-2;5

这些结果与您的结果不同.看起来你的反向排序,而这些不是.除非你澄清你正在寻找什么,否则你去吧.

附:我已经用这样的方式写了这个,如果它全部连接成一行并不重要 – 所以你可以删除所有的换行符和任何前面的反斜杠,使其成为单行.

像这样:

{ nl -s\; -w1 -ba | sort -t\; -k2,2 | sed -e:n -e'h;$!N' -e's/^\([^;]*\(;[^;]*\;).*\)\n[^;]*\2/\1;/;tn' -ex -e:N -e's/;/;/6p;tD' -e's|$|;N/A|;tN' -e:D -ex -eD | sort -t\; -nk1,1 | cut -d\; -f2-; } out

我无法想象你为什么要那样做.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值