【问题标题】:Linux grep pipeLinux grep 管道
【发布时间】:2011-08-02 10:14:28
【问题描述】:

我有一个包含数字列表的 input.txt 文件:

1719
194
1719
1719
194
1135
194

我想使用 grep 管道创建一个 output.txt,以便按出现次数的升序对它们进行排序,即:

194: 3 times
1719: 2 times
1135: 1 time.

有什么建议吗?

【问题讨论】:

    标签: shell pipe


    【解决方案1】:

    假设数字在 6910460.txt 中没有空行:

    $ cat 6910460.txt | sort | uniq -c | sort -nr
    3  194
    2 1719
    1 1135
    

    或者如果您还需要文本“times”,您可以附加一个 awk 命令:

    $ cat 6910460.txt | sort | uniq -c | sort -nr | \
        awk 'BEGIN {FS=OFS=" "} \
            {temp=$2; $2=$1; $1=temp} {printf "%4i %4i time(s)\n", $1, $2}'
    

    哪个会打印:

     194    3 time(s)
    1719    2 time(s)
    1135    1 time(s)
    

    【讨论】:

      【解决方案2】:
      awk '
          {count[$0]++} 
          END {for (n in count) {print n ": " count[n] " times"}}
      ' file |
      sort -nr -k2
      

      【讨论】:

        【解决方案3】:
        echo "1719
        194
        1719
        1719
        194
        1135
        194" | sort -n | uniq -c 
              3 194
              1 1135
              3 1719
        

        这样就足够了,还是你可以自己切换值?

        【讨论】:

          【解决方案4】:

          目前我手头没有 Linux,但希望有这样的工作:

          cat input.txt | sort | uniq -c | sort -g
          

          【讨论】:

          • 由于出现频率都是整数,所以没有充分的理由将较慢的浮点数与sort -g 一起使用。坚持-n
          猜你喜欢
          • 2021-09-11
          • 2017-10-17
          • 1970-01-01
          • 2010-10-12
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多