在bash中对CSV行进行排序


命令的输出以UUID的CSV列表的形式发送。但是UUID没有排序,所以很难判断一行是否是唯一的。我想按逗号之间的值对每行进行排序,然后对行进行uniq排序。

我知道我可以用awk破解一些东西,但我希望有一个更干净/更优雅的内衬。有什么想法吗?

编辑

以下是一些示例数据:

9166e19c-4794-467e-baad-3f8c2f2656cb,f5553f54-589b-4afd-a8e0-2239b23dc138,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,7e17bf09-e56b-428e-94c9-a7dc50991e00,360b7de7-d7e5-455a-8eb8-0bd856c705ed
9166e19c-4794-467e-baad-3f8c2f2656cb,360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,f5553f54-589b-4afd-a8e0-2239b23dc138,ee721e70-a7e2-4da2-a2b0-22bec3432c3d
9166e19c-4794-467e-baad-3f8c2f2656cb,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,7e17bf09-e56b-428e-94c9-a7dc50991e00,f5553f54-589b-4afd-a8e0-2239b23dc138,360b7de7-d7e5-455a-8eb8-0bd856c705ed
9166e19c-4794-467e-baad-3f8c2f2656cb,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,f5553f54-589b-4afd-a8e0-2239b23dc138
9166e19c-4794-467e-baad-3f8c2f2656cb,f5553f54-589b-4afd-a8e0-2239b23dc138,360b7de7-d7e5-455a-8eb8-0bd856c705ed,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,7e17bf09-e56b-428e-94c9-a7dc50991e00
9166e19c-4794-467e-baad-3f8c2f2656cb,360b7de7-d7e5-455a-8eb8-0bd856c705ed,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,f5553f54-589b-4afd-a8e0-2239b23dc138,7e17bf09-e56b-428e-94c9-a7dc50991e00
9166e19c-4794-467e-baad-3f8c2f2656cb,7e17bf09-e56b-428e-94c9-a7dc50991e00,f5553f54-589b-4afd-a8e0-2239b23dc138,360b7de7-d7e5-455a-8eb8-0bd856c705ed,ee721e70-a7e2-4da2-a2b0-22bec3432c3d
9166e19c-4794-467e-baad-3f8c2f2656cb,360b7de7-d7e5-455a-8eb8-0bd856c705ed,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,f5553f54-589b-4afd-a8e0-2239b23dc138,7e17bf09-e56b-428e-94c9-a7dc50991e00
9166e19c-4794-467e-baad-3f8c2f2656cb,f5553f54-589b-4afd-a8e0-2239b23dc138,360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,ee721e70-a7e2-4da2-a2b0-22bec3432c3d
9166e19c-4794-467e-baad-3f8c2f2656cb,7e17bf09-e56b-428e-94c9-a7dc50991e00,360b7de7-d7e5-455a-8eb8-0bd856c705ed,f5553f54-589b-4afd-a8e0-2239b23dc138,ee721e70-a7e2-4da2-a2b0-22bec3432c3d
9166e19c-4794-467e-baad-3f8c2f2656cb,7e17bf09-e56b-428e-94c9-a7dc50991e00,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,360b7de7-d7e5-455a-8eb8-0bd856c705ed,f5553f54-589b-4afd-a8e0-2239b23dc138
9166e19c-4794-467e-baad-3f8c2f2656cb,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,7e17bf09-e56b-428e-94c9-a7dc50991e00,360b7de7-d7e5-455a-8eb8-0bd856c705ed,f5553f54-589b-4afd-a8e0-2239b23dc138
9166e19c-4794-467e-baad-3f8c2f2656cb,f5553f54-589b-4afd-a8e0-2239b23dc138,360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,ee721e70-a7e2-4da2-a2b0-22bec3432c3d
9166e19c-4794-467e-baad-3f8c2f2656cb,360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,f5553f54-589b-4afd-a8e0-2239b23dc138,ee721e70-a7e2-4da2-a2b0-22bec3432c3d

干杯。

使用Perl和uniq,您可以这样做:

perl -F, -lane '@A=sort @F; print join(",",@A)' input_file | uniq

编辑:

@A实际上是不必要的,它同样有效,而且更短更快。

perl -F, -lane 'print join(",",sort @F)' input_file | uniq

使用的选项:

  • -e=可用于进入一行程序(一行模式)
  • -a=打开自动拆分模式,将拆分后的值放在@F数组上
  • -F,=将拆分分隔符设置为逗号
  • -n=使perl假定while(<>){...}循环使用您的程序
  • -l=启用自动换行处理

在这一行中,@F是一个特殊数组,包含已拆分的UUID。它被排序并复制到@A数组中。然后用CCD_ 14连接的值来打印CCD_。此命令的输出通过管道传输到uniq,因此您只能获得唯一的行。

输出:

360b7de7-d7e5-455a-8eb8-0bd856c705ed,7e17bf09-e56b-428e-94c9-a7dc50991e00,9166e19c-4794-467e-baad-3f8c2f2656cb,ee721e70-a7e2-4da2-a2b0-22bec3432c3d,f5553f54-589b-4afd-a8e0-2239b23dc138

使用shell

while read i 
do
echo $i | tr "," "n" | sort | tr "n" "," | sed "s/,$//"
echo 
done < file |sort -u

相关内容

  • 没有找到相关文章

最新更新