代码之家  ›  专栏  ›  技术社区  ›  Abundnce10

Unix uniq命令到CSV文件

  •  8
  • Abundnce10  · 技术社区  · 11 年前

    我有一个文本文件(list.txt),其中包含单个和多个单词的英语短语。我的目标是对每个单词进行字数统计,并将结果写入CSV文件。

    我已经找到了写每个单词的唯一实例数量的命令,从最大到最小排序。该命令是:

    $ tr 'A-Z' 'a-z' < list.txt | tr -sc 'A-Za-z' '\n' | sort | uniq -c | sort -n -r | less > output.txt
    

    问题在于新文件(output.txt)的格式化方式。有3个前导空格,后面跟着出现的次数,后面跟着一个空格,后面跟单词。然后转到下一行。例子:

       9784 the
       6368 and
       4211 for
       2929 to
    

    我需要做什么才能以更理想的格式(如CSV)获得结果?例如,我希望它是:

    9784,the
    6368,and
    4211,for
    2929,to
    

    更好的是:

    the,9784
    and,6368
    for,4211
    to,2929
    

    有没有办法用Unix命令做到这一点,或者我需要在文本编辑器或Excel中进行一些后处理?

    2 回复  |  直到 11 年前
        1
  •  8
  •   Andrew Stein    11 年前

    使用 awk 如下所示:

     > cat input 
       9784 the
       6368 and
       4211 for
       2929 to
     > cat input | awk '{ print $2 "," $1}'
    the,9784
    and,6368
    for,4211
    to,2929
    

    您的完整管道将是:

    $ tr 'A-Z' 'a-z' < list.txt | tr -sc 'A-Za-z' '\n' | sort | uniq -c | sort -n -r | awk '{ print $2 "," $1}' > output.txt
    
        2
  •  0
  •   venkat    2 年前

    使用sed将空格替换为逗号

    cat extra_set.txt | sort -i | uniq -c |  sort -nr | sed 's/^ *//g' | sed 's/ /\, /'