如何获取字符串并按字母顺序排列并计算其中的单词数?

时间:2013-02-07 02:57:18

标签: bash

基本上我的问题是这个,我有一个以句点分隔的字符串,我希望能够在新行上打印每个单词的次数。

这是我已经拥有的: 编辑:

#!/bin/bash
PARAM=$1 
FILE=${1-test.txt}
#echo $FILE

temp=$( tr '\n' '.' <$FILE )

arr=$(echo $temp | tr "." "\n")

for x in $arr
do
    echo "$x"
done

所有这一切都打印出一行中的每个单词。现在我需要计算每个单词出现的次数,然后在单词旁边打印出来。例如:

临时内容=苹果,梨,苹果,桃子

输出应为:

apple 2
pear 1
apple 2
peach 1

每个单词都在一个新行上。

2 个答案:

答案 0 :(得分:1)

uniq(1)可能会做你想要的。例如:

$ echo 'foo.bar.baz.bar.foo.box.foo' | tr '.' '\n' | sort | uniq -c
      2 bar
      1 baz
      1 box
      3 foo
$

请注意,uniq要求已排序的输入才能正确计算出现次数。

答案 1 :(得分:1)

你可以用awk做到这一点。给出一个如下所示的文件:

this.is.a.test
and.this.is.test2
and.this.is.test3

以下awk将为您提供单词及其计数

awk 'BEGIN{
        FS="."
    }
    {
        for(i=1;i<=NF;i++){
            a[$i]++
        }
    } 
    END{ 
        for(word in a)print word, a[word]
    }'

将产生以下输出:

test 1
a 1
test2 1
test3 1
and 2
this 3
is 3