ファイルリストで単語リストを見つける必要があります。そのため、単語リストをファイルに入れ、for
ループを使用してファイル内の各単語を読み込み、findコマンドを使用して見つかったgrep
ファイルのリストでその単語を見つけました。
上記のLinuxバージョンを使用しています。
bash-3.1$ uname
HP-UX
以下に記載されているのは私のシェルスクリプトです。
#!/bin/sh
PATH="/NO/20171013"
STRING=`/usr/bin/cat /home/test/STAT44_test.txt`
for LINE in ${STRING}
do
echo "find ${PATH} -type f -name \"*.txt\" -exec grep -w "${LINE}" {} \; 2>/dev/null | /usr/bin/wc -l"
LINES=`find ${PATH} -type f -name "*.txt" -exec grep -w "${LINE}" {} \; 2>/dev/null | /usr/bin/wc -l`
echo "LINES count is ${LINES}"
if [ ${LINES} -eq 0 ]
then
echo "In not found"
# echo "${LINE} is not found in ${PATH}" >> /home/test/STAT44_not_found.out
else
echo "In Found"
# echo "${LINE} is found in ${PATH}" >> /home/test/STAT44_found.out
fi
done
findコマンドはfind ${PATH} -type f -name "*.txt" -exec grep -w '${LINE}' {} \; 2>/dev/null
コマンドプロンプトで完全に機能しますが、上記のようにシェルスクリプトで使用すると出力は提供されません。
出力echo $?
は0ですが、findコマンドは出力を生成しません。
スクリプトの出力は次のとおりです。
find /NO/20171013 -type f -name "*.txt" -exec grep -w 655044810645 {} \; 2>/dev/null | /usr/bin/wc -l
LINES count is 0
In not found
find /NO/20171013 -type f -name "*.txt" -exec grep -w 734729751028 {} \; 2>/dev/null | /usr/bin/wc -l
LINES count is 0
In not found
実際、*.txt
以下のファイルには/NO/20171013
パターン655044810645
と734729751028
が含まれているのでWord count
、ゼロではなく、そのelse
セクションに入る必要があります。
何が欠けている可能性がありますか?
ベストアンサー1
$PATH
はい意味のある重要な変数。別の名前を選択する必要があります。
この場合、原因がないfind
ため実行可能ファイルが見つかりません。$PATH
そのため、通知が届きませんでした2>/dev/null
。
echo
$PATH
おそらくシェルが組み込まれているので、動作する必要はありません。for
待つのも同じだ。