2017-03-31 7 views
-1

乱数を生成し、この出力の第3のファイル:パイピングされた入力は、私はこの方法でフォーマットされた2つのファイルを持っている

word token occurrence1/occurence2 

これは私のコードです:

while read token pos count 
do 
    #get pos counts 
    poscount=$(grep "^$pos" $2 | cut -f 2) 
    #calculate probability 
    prob=$(echo "scale=5;$count/$poscount" | bc -l) 
    #print token, pos-tag & probability 
    echo -e "$token\t$pos\t$prob" 
done < $1 

問題は私の出力は、このようなものであるということである:彼らはどこから来た私は、彼らはありません、知らない番号の行があります

- : .25000 
: : .75000 
' '' 1.00000 
0 CD .00396 
1000 CD .00793 
13 CD .00793 
13th JJ .00073 
36 
29 
16 CD .00396 
17 CD .00396 

以前のファイルにあります。

これらの数字はなぜ表示されますか?これらの行を削除する方法はありますか? ありがとうございます!

+0

番目は何ですか実際のファイル名ですか?安全のために変数を二重引用符で囲む: '' $ 2 ''。 – choroba

+1

なぜ実際のファイルのいくつかの行を投稿しないのですか?あなたは、 '-x'オプションや' echo -e "> $ token <\t> $ count <\t> $ postcount <" 'のようなトリックを使って自分のスクリプトをデバッグしようとしましたか?言い換えれば、 'count'と' postcount'の値を調べていないときに、 ''乱数を生成する部分であることがどうして分かりますか? – Jdamian

+0

おそらく原因: 'grep"^$ pos "$ 2 |切断-f 2 ';いくつかの行が '$ pos'の特定の値で始まる場合、' grep'はそれらすべてを見つけるでしょう。 – agc

答えて

0
  1. pastecut、& dcを使用する方法:bashpaste & dcを使用して

    echo "5 k $(paste file[12] | cut -f 3,5)/p" | dc | \ 
    paste file1 - | cut --complement -f 3 
    
  2. は方法:

    paste <(join -1 2 file1 -2 1 file2 -o 1.1,1.2) \ 
        <(echo "5 k $(join -1 2 file1 -2 1 file2 -o 1.3,2.2)/p" | dc) 
    
関連する問題