2017-03-22 9 views
0

私はこのコマンドを使用して:awk 'NR==FNR{a[$0];next}!($0 in a)' spellingword.txt /tmp/userwords.txt 2つのファイルを比較して差異を発見し、その差を数値に変換したいと考えています。そのため、それらの単語の3行が提示されている -ファイルを比較して差分をとり、それを数値にします

例は、2つのファイルを比較するとき、userwords.txtspellingword.txtと一致しない三つの言葉で戻ってくる、となります。今、私はその出力を取って数字 "3"にしたいと思います。

UPDATE:

Spellingword.txt 
tall 
ball 
fall 
wall 
paul 

Userword.txt 
tall 
ball 
fall 
wall 
pall 

ポール間違って綴られたエンドユーザー。今、ファイルを比較すると、私はこの結果を得る。そして、grep -Rl "curl" ./ | wc -lコマンドを使用して

pall} 

それは1あるべきとき、私は、2の結果を取得します。 }はどこから来たのですか? アイデアそれとも私はこのすべてに間違っているのだろうか? (注釈付き)

+1

上記のファイルと期待される出力のサンプルを投稿してください。 –

+1

[ターミナル出力の行数をカウントする](http://stackoverflow.com/q/12457457/2088135)? –

+0

@JamesBrownエンドユーザが予測できない理由がわからない出力は、ユーザーの入力によって異なります。 –

答えて

0

マイuserwords.txt

tall # match 
ball # match 
fall # match 
wall # match 
pall # no match 
paul} # partial match 

コード:

$ awk '      
NR==FNR {     # hash the first file 
    a[$1] 
    next 
} 
{ 
    if($1 in a)    # search for full match 
     next     # skip to next record if there was a match, else: 
    for(i in a)    # loop thru all entries in hash 
     if($1 ~ i || i ~ $1) # search for partial match 
      next    # skip to next record if there was a match, else 
    c++      # count misses 
} 
END { 
    print c     # print miss count 
}' spellingword.txt /tmp/userwords.txt 
1        # this was the output for "pall" 

唯一の改善はすなわち、 "部分一致" を検索することでした。 paulpaul}を比較すると、ヒットした後、もう一度、間違ったタイプのpualpaulと一致しません。あなたもそれらをキャッチしたい場合は、おおよそのパターン一致ツールagrepを試してみて、適切なパラメータでタイプミスを検出するために使用することをお勧めします。

関連する問題