【问题标题】:sort items in a text file seperated by commas [duplicate]对用逗号分隔的文本文件中的项目进行排序[重复]
【发布时间】:2018-04-12 23:09:54
【问题描述】:

我有一个单行文本文件,其中包含引号中的字符串并用逗号分隔,如下所示

未排序的.txt

“简”、“鲍勃”、“蒂姆”、“哈利”

如何使用 bash 按字母顺序对项目进行排序,我想保存到 排序的.txt

“鲍勃”、“哈利”、“简”、“蒂姆”

我试过这个,它只对行进行排序,但只有一行。

sort -t, unsorted.txt > sorted.txt

我该怎么办?

【问题讨论】:

  • 只有一行?或者你想根据标题对列进行排序?
  • 如果 csv 包含数据并且 OP 需要根据标题对所有列进行排序,这将是非常重要的处理。
  • 好吧,也许它不是一个真正的 csv 文件,因为它没有标题,它只是一行文本,用逗号分隔,每个字符串都有引号。

标签: bash csv sorting


【解决方案1】:

使用 Perl:

perl -F, -lane 'print join ",", sort @F' unsorted.txt

输出:

“鲍勃”、“哈利”、“简”、“蒂姆”

【讨论】:

  • 你为什么用 printf?
  • @123:我已经更新了答案。
【解决方案2】:

没有 perl:

echo '"JANE","BOB","TIM","HARRY"' | tr -s ',' '\n' | sort | tr -s '\n' ',' | sed s/,$//g

首先,将逗号转换为换行符,管道进行排序,转换回逗号,并用 sed 删除最后一行的逗号。

【讨论】:

    【解决方案3】:

    awk

    awk -F, '{split($0,a); asort(a); for(i=1;i<=NF;i++) printf "%s", a[i] (i==n?ORS:FS)}'
    

    【讨论】:

      【解决方案4】:

      另一个使用 bash + 排序

      echo '"JANE","BOB","TIM","HARRY"'|while IFS=',' read -a l;do g=$(printf "%s\n" ${l[*]}|sort);echo ${g//$'\n'/","}; done
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 2018-05-19
        相关资源
        最近更新 更多