Bash 我如何获取一个字符串并按字母顺序排列,以及计算其中的字数?

Bash 我如何获取一个字符串并按字母顺序排列,以及计算其中的字数?,bash,Bash,基本上,我的问题是,我有一个由句点分隔的字符串,我希望能够在新行上打印每个单词,并在旁边显示它出现的次数 以下是我已经得到的: 编辑: 每个单词都在一个新行。uniq(1)可能可以做你想做的事情。例如: $ echo 'foo.bar.baz.bar.foo.box.foo' | tr '.' '\n' | sort | uniq -c 2 bar 1 baz 1 box 3 foo $ 请注意,uniq需要经过排序的输入才能正确计算出现次数。您

基本上,我的问题是,我有一个由句点分隔的字符串,我希望能够在新行上打印每个单词,并在旁边显示它出现的次数

以下是我已经得到的: 编辑:

每个单词都在一个新行。

uniq(1)
可能可以做你想做的事情。例如:

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

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

您可以在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]
    }'

你对剧本有什么问题?一些示例输入的预期输出是什么,实际输出是什么?当我尝试运行此命令时,收到一个“未找到命令”错误。命令中不包含美元符号@nandhp只是使用美元符号来表示提示。复制美元符号后第一行的所有内容,但不包括美元符号。(此外,仅从第一行键入命令。答案中的所有其他内容都是输出的一部分。
this.is.a.test
and.this.is.test2
and.this.is.test3
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