gpt4 book ai didi

bash - 用于搜索必须包含两个特定关键字的文本文件的 Unix 脚本

转载 作者:行者123 更新时间:2023-11-29 09:37:06 25 4
gpt4 key购买 nike

找到解决方案:(感谢 Zsolt Botykai 和 Mike Ryan)

将下面的脚本准确翻译成 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

所以我正在寻找做这样的事情的可能性:

搜索一个目录,一步过滤掉所有满足condition1 AND condition2的文件。条件通常是模式匹配,但位于文件内容的不同行。

最佳答案

使用 awk 你可以做如下事情:

awk '/FIRSTPATTERN/ {c++}
/SECONDPATTERN/ {d++}
c>0 && d>0 {print ARGV[1] ; exit 0 }
END { if (! c || ! d) {exit 1}}' INPUTFILE

现在你可以像这样使用它:

find /YOUR/PATH -type f -exec \
awk '/FIRSTPATTERN/ {c++}
/SECONDPATTERN/ {d++}
c>0 && d>0 {print ARGV[1] ; exit 0 }
END { if (! c || ! d) {exit 1}}' \{\} \;

关于bash - 用于搜索必须包含两个特定关键字的文本文件的 Unix 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com