CSV处理:将列/行值移动到列值匹配的不同行

CSV处理:将列/行值移动到列值匹配的不同行

我有一个大约 50 列的 csv 文件,可以是 20 到 100 行之间的任意位置。

各个记录都有 ID,有些记录可以在 2 个一组中。本质上,我需要做的是将一个 ID 添加到该组中另一个 ID 所在的同一行。示例:

ID     ,group,blank column
2019-1 ,     ,
2019-2 ,GRP1 ,
2019-3 ,GRP2 ,
2019-4 ,GRP1 ,
2019-5 ,     ,
2019-6 ,GRP2 ,

我想要的输出是:

ID     ,group,blank column
2019-1 ,     ,
2019-2 ,GRP1 ,2019-4
2019-3 ,GRP2 ,2019-6
2019-5 ,     ,

在我尝试使用 awk 时,我没有任何运气。我要么最终遗漏没有组的行,要么最终重复值。

答案1

perl -a -F, -ne 'if($F[1]=~/\S/) { push @{$d{$F[1]}}, $F[0]; } else { print ; }
  END {
    for(keys %d){
      print shift @{$d{$_}},",$_, ",@{$d{$_}},"\n"
    }
  }' my.csv

相关内容