1

基本的に私の問題はこれです。ピリオドで区切られた文字列があります。新しい行に各単語をその隣に出現する回数で印刷できるようにしたいのです。

これが私がすでに持っているものです:編集:

#!/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

これは、1行に各単語を印刷するだけです。次に、各単語が表示される回数を数えて、単語の横に印刷する必要があります。例えば:

一時的な内容=リンゴ、ナシ、リンゴ、桃

出力は次のようになります。

apple 2
pear 1
apple 2
peach 1

ここで、各単語は新しい行にあります。

4

2 に答える 2

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出現回数を適切にカウントできるようにするには、ソートされた入力が必要であることに注意してください。

于 2013-02-07T03:12:42.943 に答える
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
于 2013-02-07T03:13:27.740 に答える