以下のスクリプトでは、[各]ファイルにどのキーワードがあるかを調べたいと思います。 echo $keywordsを追加しようとしましたが、各キーワードのみが出力されました。
パスワード:
keywords=("Alachua" "ALACHUA" "alachua" "Archer" "Gainesville" "Hawthorne" "High Springs" "Newberry" "Waldo" "LaCrosse" "PA-LOCKA" "PALMETTO BAY" "PINECREST" "34997")
IFS=$'\n'
find . -size +1c -type f ! -exec grep -qwF "${keywords[*]}" {} \; -exec truncate -s 0 {} \;
修正する:
私の問題は、この例よりも多くのキーワードがあり、各ファイルにどのキーワードがあるかわからないということです。結果がめちゃくちゃになる可能性があるため、$keywordsから削除する必要があります。
答え1
いくつかの質問があります:
あなたは
"${keywords[*]}"
混乱しています"${keywords[@]}"
。前者は次に拡張される。一つ議論。-q
すべての出力を抑制します。複数のスキーマがある場合は、パラメータリストに渡すことはできません。あなたが必要とするの
-e pattern1 -e pattern2
はです。またはファイルに渡す必要があります(参考資料を参照-f
)。
awk
この場合はもっと意味があると思います。
これは便利です。
awk -v patternfile=pattern \
'BEGINFILE {i=0; while(getline var <patternfile) {pattern[i]=var;i++}; '\
'no_patterns=i; close(patternfile)}; '\
'FNR == 1 {print ""; print "file: " FILENAME;}; '\
'{for (i in pattern) { if($0 ~ pattern[i]) {print pattern[i]; delete pattern[i]};}}' \
file file2