2016-10-14 19 views
1

私はn個のテキストファイルを持つディレクトリを持っています。さて、私はこれらのファイルのいずれかが定数ファイルの1つ(またはそれ以上)の単語を含んでいるかどうか確認したいと思います。 これらのファイルは、すべて単語の量が異なるすべての辞書です。定数ファイルはパスワードリストです。ここではこれらの単語をチェックします。正しいヒットの量は変数に保存する必要があります。また、単語は変数に保存する必要があります(私は配列として考える)。例えばディレクトリ内のファイルに定数ファイルの単語が含まれていないか確認してください。

file1は私のパスワードリストはthis is a test for the dictionary and we have no other oneが含まれている、file2And another one含まれ、This is my dictionaryが含まれています。 file1のヒット数は、This is dictionaryn1=3ワード)であり、file2and onen2=2ワード)です。

私の現在のコードでは、彼女は私がdictionarysの異なる量を持っていること、である私の最大の問題の

#!/bin/bash 
# program_call passwordlist.txt *.txt 
passwordlist="$1" 
dictionarys="$*" 
for comparison in $dictionarys; do 
    cat $passwordlist $comparison| sort | uniq -d >${comparison}.compare 
done 

一つです。おそらく2、おそらく200です。これらのすべてはパスワードリストと照合されなければなりません。正しい単語と正しい単語自体がOWN変数に保存されなければなりません。だから私は各辞書の2つの変数を考える。

+0

あなたが持っているコードの何が問題なのですか?あなたは本当にファイルではなくシェル変数に結果を保存する必要がありますか?一致の数が必要な場合は、 'wc -l $ comparison.compare'を使用してください。 – Barmar

+0

' fgrep -x -f $ passwordlist $ comparison'を使って、ファイル間で一致する行を取得することもできます。 – Barmar

+0

私の問題は、私の出力は常にそれらの結果のすべてが1つのファイルだということです。結果が出てきたファイルだけを取得しても大丈夫です。私は、通常、すべての単一の$辞書が比較で保存されていると思ったので、私の出力は、例えばfile1.compare、file2.compare、file3.compareなどです。しかし、私の出力はすべての結果でのみ.comapareです。理解できません。また、私はテキストファイルだけに興味があります。だから、私は '$ 1dictionary * .txtで比較しようとしました。私は同じ問題を抱えています。ただ1つの出力ですが、この場合、その呼び出しは* .txt.compareです。 – ipo

答えて

0

私のソリューション:

#!/bin/bash 
# program_call_is /dictionarys/*.txt passwordlist.txt 
dictionarys="$1" 
shift 
passwordlist="$*" 
for comparison in $dictionarys; do 
fgrep -x -f $passwordlist $comparison >${comparison}.compare 
done 
1

別の方法

$ for f in file{1,2}; 
    do echo -n $f": "; 
    grep -iow -f <(tr ' ' '\n' <cons) $f | 
    wc -l; 
    done 

file1: 3 
file2: 2 

は、ケースを無視する単語の一致のための辞書ファイルをチェックし、一致した発生をカウント、定数は、1行に1つの単語をファイル変換します。

+0

コマンドtr ideaありがとう! – ipo

関連する問題