エコ発見キーワード

エコ発見キーワード

以下のスクリプトでは、[各]ファイルにどのキーワードがあるかを調べたいと思います。 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

いくつかの質問があります:

  1. あなたは"${keywords[*]}"混乱しています"${keywords[@]}"。前者は次に拡張される。一つ議論。

  2. -qすべての出力を抑制します。

  3. 複数のスキーマがある場合は、パラメータリストに渡すことはできません。あなたが必要とするの-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

関連情報