發現的解決方案:(感謝Zsolt的Botykai和邁克·瑞恩)的Unix腳本來搜索必須包含文本文件的兩個特定的關鍵字
下面的腳本的確切翻譯成awk
的一行是:
find /home/data/ -type f -exec awk '/PATTERN1/ {c++} /PATTERN2/ {d++} c>0 && d>0 {print ARGV[1] ; exit 0 } END { if (! c || ! d) {exit 1}}' \{\} \; > assetsToDelete.txt 2>&1
看到https://stackoverflow.com/a/9442764/356815
原題:
問題很簡單,但我沒有找到一個可能性,爲此創建一個快速腳本。
我有100'000個文本文件,我需要搜索所有這些,滿足兩個條件。
我的腳本看起來像這樣,但它像地獄一樣緩慢......任何更好的主意?
echo Searching for first criteria...
date
grep -rl 'PATTERN1' /home/data/assets/ > assets.txt
file=assets.txt
echo Now filtering for second criteria
date
for i in `cat $file`
do
grep -l 'PATTERN2' $i >> assetsToDelete.txt
done
echo DONE
date
於是我找了有可能做這樣的事情:
搜索目錄,並篩選出滿足一步到位條件1和條件2中的所有文件。條件通常是模式匹配,但在文件內容的不同行上。
這些模式是否在同一行? – 2012-02-24 17:38:08
不,在不同的行上 – basZero 2012-02-25 07:27:17