计算唯一字符串,其中bash中每行有一个字符串

时间:2012-01-28 10:08:35

标签: bash count

给定输入文件

z
b
a
f
g
a
b
...

我想输出每个字符串的出现次数,例如:

z 1
b 2
a 2
f 1
g 1

如何在bash脚本中完成?

6 个答案:

答案 0 :(得分:4)

您可以sort输入并传递给uniq -c

$ sort input_file | uniq -c
 2 a
 2 b
 1 f
 1 g
 1 z

如果您想要右侧的数字,请使用awk切换它们:

$ sort input_file | uniq -c | awk '{print $2, $1}'
a 2
b 2
f 1
g 1
z 1

或者,在awk中完成整个事情:

$ awk '
{
    ++count[$1]
}
END {
    for (word in count) {
        print word, count[word]
    }
}
' input_file
f 1
g 1
z 1
a 2
b 2

答案 1 :(得分:1)

cat text | sort | uniq -c

应该做的工作

答案 2 :(得分:1)

尝试:

awk '{ freq[$1]++; } END{ for( c in freq ) { print c, freq[c] } }' test.txt

test.txt将成为您的输入文件。

答案 3 :(得分:1)

这是bash - 仅限版本(需要bash版本4),使用associative array

#! /bin/bash

declare -A count
while read val ; do
    count[$val]=$(( ${count[$val]} + 1 ))
done < your_intput_file # change this as needed

for key in ${!count[@]} ; do
    echo $key ${count[$key]}
done

答案 4 :(得分:0)

您可以使用sort filename | uniq -c

查看the Wikipedia page on uniq

答案 5 :(得分:0)

这可能对您有用:

cat -n file | 
sort -k2,2 | 
uniq -cf1 | 
sort -k2,2n | 
sed 's/^ *\([^ ]*\).*\t\(.*\)/\2 \1/'

这将按照出现的顺序输出每个字符串的出现次数。