2012-02-13 7 views
0

を取得されていません。 iはカウンタ変数で、その初期値は0です。 tLenは、移動中の配列の長さを格納します。 itLenに達しても、この状態はtrueになりません。どこが間違っていますか?、条件は次の式が間違っている何真

これは私の完全なコードです:

read filename 
words=(5 2) 
i=0 
sed 's/ /\n/g' "$filename" >"tmp.txt" 
while read word 
do 
    words[i]=$word 
    i=$(($i+1)) 
    awk "/$word/ {count += 1} END{print count}" "tmp.txt" >>"tmp2.dat" 
done <"tmp.txt" 
i=0 
tLen=${#words[@]} 
echo "Length of words: ${tLen}" 
declare -A wordMap 
while read count 
do 
    if [ $i -ge ${tLen} ]; then 
    echo "Maximum length reached, i=$i" 
    break 
    fi 
    wordMap["${words[$i]}"]=$count 
    i=$(($i+1)) 
done <"tmp2.dat" 

rm "tmp.txt" 
rm "tmp2.dat" 

は実際に私が与えられたテキスト中の各単語の頻度を計算しようとしています...

+0

残りのコードを記載してください。それはあなたが[サブシェルの問題]を持っている可能性があります(http://mywiki.wooledge.org/BashPitfalls#grep_foo_bar_.7C_while_read_-r.3B_do_.28.28count.2B-.2B-.29.29.3B_done) – l0b0

+0

私のために働く。最初の行で '#!/ bin/bash -xv'を実行して、変数の内容を確認してください。 – choroba

+0

Imに「bad array subscript」というエラーが表示されるのはどういう意味ですか? – batman

答えて

0

このコードは、空の行を含むテキストや単語間の複数のスペースに問題があります。 ${words[$i]}が空であるので、その場合には線

wordMap["${words[$i]}"]=$count 

bad array subscriptメッセージで失敗するであろう。

0

これは、「本物」の質問への答えではありませんファイル内の単語数を実際に数えたい場合は、

sed 's/[[:space:][:punct:]]/\n/g;' < testfil | sed '/^$/d' | sort -f | uniq -ci | sort -n 

と思われます。

あなたのコードでは、特に最小限の例ではありませんが、私のコードでは明らかにエラーを見ることはできません。デバッグechoステートメントを挿入するか、コードの最初にset -xを設定して、動作をエミュレートする最小限の例を取得してください。

関連する問題