shell-script – 合并部分重复项

我有一个包含四列的csv文件

aa,bb,cc,dd  
ee,bb,cc,dd  
ff,bb,cc,dd  
xx,11,22,33  
yy,11,22,33  

我想把它变成:

aa,ee,ff,bb,cc,dd  
xx,yy,11,22,33  

基本上,找到最后3列相同的行并合并第一个字段.

有谁知道如何在bash或Python中执行此操作?

最佳答案
Perl的

hash%h保存数据,而数组@h管理遇到哈希元素的顺序. OTW,将以随机顺序选择散列键.

perl -F, -lane '
   BEGIN{ $"=$,=","; }
     push @{$h{"@F[-3..-1]"}}, $F[0];
     $h[-1+keys %h] = "@F[-3..-1]";
   END{ print  @{$h{$_}}, $_ for @h; }
'  yourcsvfile

桑达

sed -e '
   :loop
      $!N
      s/^\(.*\)\(\(,[^,]*\)\{3\}\)\n\([^,]*\)\2$/\1,\4\2/
   tloop
   P;D
'  yourcsvfile

巴什

sed \$G yourcsvfile | # we add a dummy line to signal last record has been processed
while IFS=, read -r -a A; do
   var=${A[@]: -3:3}
   var=${var// /,}
   case $var in
      "$prev" ) x=${x-}${x:+,}${A[0]} ;;
      * ) case $prev in ?* ) echo "$x,$prev" ;; esac; prev=$var; x=${A[0]} ;;
   esac
done

转载注明原文:shell-script – 合并部分重复项 - 代码日志