【发布时间】: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.
有什么建议吗?
【问题讨论】:
我有一个包含数字列表的 input.txt 文件:
1719
194
1719
1719
194
1135
194
我想使用 grep 管道创建一个 output.txt,以便按出现次数的升序对它们进行排序,即:
194: 3 times
1719: 2 times
1135: 1 time.
有什么建议吗?
【问题讨论】:
假设数字在 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)
【讨论】:
awk '
{count[$0]++}
END {for (n in count) {print n ": " count[n] " times"}}
' file |
sort -nr -k2
【讨论】:
echo "1719
194
1719
1719
194
1135
194" | sort -n | uniq -c
3 194
1 1135
3 1719
这样就足够了,还是你可以自己切换值?
【讨论】:
目前我手头没有 Linux,但希望有这样的工作:
cat input.txt | sort | uniq -c | sort -g
【讨论】:
sort -g 一起使用。坚持-n。