2017-03-31 42 views
-1

我有這樣格式的兩個文件:爲`bc`師管道輸入產生隨機數

文件1:

word token occurence 

文件2:

token occurence 

我要的是帶有此輸出的第三個文件:

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 | cut -f 2';如果多行以'$ pos'的特定值開始,那麼'grep'會找到所有這些行。 – agc

回答

0
  1. 使用方法pastecut,& dc

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

    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)