linux - 如何使用带引号的字段(可能包含分隔符)对 CSV 进行排序

标签 linux shell unix sh posix

在 shell 脚本中,我试图对 CSV 文件进行排序。某些字段可能包含分隔符并被引用以正确处理此问题。假设我有一个文件:

"2",D,Clair
1,R,Alice
"3","F","Dennis"
2,"P,F",Bob
我想在第一列上排序,然后是第三列。结果应该是:
1,R,Alice
2,"P,F",Bob
"2",D,Clair
"3","F","Dennis"
字段中也可能有转义的双引号。通常,CSV 将符合 RFC 4180 .
我试图用 sort -t , -k 1,1 -k 3,3 来做到这一点但这不起作用,因为 sort不知道 CSV 中引号的特殊含义。我找不到制作 sort 的方法这样做。也许我应该使用另一个命令,但我找不到任何命令。
如何对我的 CSV 进行排序?

最佳答案

我会使用优秀的 xsv为了工作:

$ xsv sort --no-headers --select 1,2 input.csv
1,R,Alice
2,D,Clair
2,"P,F",Bob
3,F,Dennis

csvkit也可以这样做:
$ csvsort --no-header-row --columns 1,2 input.csv
a,b,c
1,R,Alice
2,D,Clair
2,"P,F",Bob
3,F,Dennis

关于linux - 如何使用带引号的字段(可能包含分隔符)对 CSV 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896287/

相关文章:

linux - 解释一下这个shell脚本

linux - 从 root (unix) 运行脚本时变量不存储值

linux - bssh 自动在两个 linux 服务器之间传输文件

linux - 如何在不读取的情况下访问写入套接字的数据

macos - 从 shell 脚本或命令行写入 Mac OS X 控制台日志

bash - Unix命令生成带四位小数的四位随机数

linux - 如何获取unix数据文件中每行的前n个字符

php - Cron 作业无法使用 crontab linux

java - 如何从 Linux 运行 selenium webdriver(目前在 Windows 中工作)?

linux - BASH:自动完成 printf "%s"的 $keyword