给定输入文件
z
b
a
f
g
a
b
...
我想输出每个字符串的出现次数,例如:
z 1
b 2
a 2
f 1
g 1
如何在bash脚本中完成?
答案 0 :(得分:4)
$ 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
。
答案 5 :(得分:0)
这可能对您有用:
cat -n file |
sort -k2,2 |
uniq -cf1 |
sort -k2,2n |
sed 's/^ *\([^ ]*\).*\t\(.*\)/\2 \1/'
这将按照出现的顺序输出每个字符串的出现次数。