2016-09-28 2 views
0

正常に動作しているスクリプトを実行しています。しかし、昨日、私はいくつかのエラーがあります。 これらのエラーは、スクリプトのいくつかのループの後にある:GrepこのようなファイルやディレクトリはありませんエラーBashスクリプトでは、待機コマンドを挿入する必要がありますか?

sed: cant read file3.txt: No such file or directory 
grep: file3.txt: No such file or directory 
grep: file3.txt: No such file or directory 
sed: cant read file3.txt: No such file or directory 
grep: file3.txt: No such file or directory 

これらのエラーは一貫して発生しませんが、覚えておいてください。これは、スクリプトのこの部分の近くのどこかで、しばらくの間発生しています。 File3.txtが発見されていないファイルです:私は、時々、次のコマンドがあまりにも早く開始さfile3.txtが追加、以降SEDによって操作されているためと考えています、今

cat file1.txt | while read LINE; do grep -m 1 $LINE file2.txt >> file3.txt; done 
sed -i 's/string//g' file3.txt 
grep 'string' file3.txt | cut -d '|' -f1-2 > file4.txt 
grep -v 'string' file3.txt | cut -d '|' -f1-2 >> file5.txt 
sed -i 's/string//' file3.txt 
grep -Fvf file3.txt file1.txt > file6.txt 

それとファイルを見つけることができませんか?その間に待機コマンドを置くべきですか?

私はこのエラーを持つ多くのページを見上げたが、何かを見つけることができませんでしたしている:

待機またはスリープコマンドを入力すると役立つと思われる場合は、教えてください。あるいは、より良い解決策があると思うなら、それも素晴らしいでしょう。私はCygwinターミナルで走っています。どんな洞察力も大変ありがとうございます。

+0

あなたが最初の「セッド」からファイル名に空白を持っているつもりでしたか? – phreed

+0

このスクリプトは繰り返し実行されます。実行中にfile3.txtが削除されますか? 2つのランが同時であることは可能ですか?私は 'sed -i'について不思議です。 – phreed

+1

grepとsedの複数の使用法を使って、一時的なファイルをたくさん見るたびに、私はawkを思い浮かべます。私はあなたが何を持っているのか分かりませんが、あなたがやろうとしていることを一つのawkスクリプトに減らすことはほぼ確実です。入力と希望の出力を表示すると、より効果的にお手伝いできます。 –

答えて

1

file1.txtが空の場合、file3.txtは作成されません。

3

ループ内のfile3.txtにリダイレクトするのではなく、ループ全体をリダイレクトします。while入力ファイルが空であるためループが実行されない場合でもファイルは作成されます。重要な文字が(スペースはそれらの最も簡単です)がある場合

while read LINE; do 
    grep -m 1 $LINE file2.txt 
done <file1.txt> file3.txt 
+0

ちょっとした問題が解決するのを助けるBarmarちゃん。答えをありがとう。あなたは質問が好きだと思います。 – DomainsFeatured

1

またdo grep -m 1 $LINE file2.txtは、問題が発生します。
変数$LINEに、複数の単語が空白で区切られているとします(hello world)。
コマンドは次のようになります:grep -m 1 hello world file2.txt - grepの解釈は次のようになります:worldというファイルにすべてhello、現在のフォルダにファイル名file2.txtがあります。

$LINEの代わりに"$LINE"を使用すると、全く異なるシナリオにつながります。以下の二つの違いで
ルック:

grep -m 1 $LINE file2.txt 
grep -m 1 "$LINE" file2.txt 
関連する問題