用于自动化并行 grep 的简单 Makefile 返回错误
Simple Makefile for automating parallel grep is returning an error
我经常使用 Makefile 来自动执行重复执行的任务。例如,一项任务涉及在不断增长的数据集中搜索正则表达式匹配项。假设我有以下两个文本文件,search1.txt
和 search2.txt
:
search1.txt
:
DSADJKBSDJSA
TEST1
DJKSABVDJSA
search2.txt
:
hvdsjhavdjshavdsa
dsadsadsadsa
TEST3djsabdjhsavdjhsa
TEST2dsajdbsahjdvsa
这是我的 Makefile,用于使用 GNU parallel 并行搜索这些文件。
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {}
find search*.txt | parallel grep TEST2 {}
当我 运行 make search
时,第一行输出正确的数据然后抛出错误并退出,尽管 运行ning 这两行都是自己完成的很好。
> make search
find *.txt | parallel grep TEST1 {}
TEST1
make: *** [search] Error 1
> find *.txt | parallel grep TEST1 {}
TEST1
> find *.txt | parallel grep TEST2 {}
TEST2dsajdbsahjdvsa
> parallel --version
GNU parallel 20160822
我这辈子都弄不明白我做错了什么。它一定是显而易见的,但我已经将其提炼成一个如此简单的小例子,但我仍然对为什么会这样感到困惑。感谢我得到的任何帮助!
啊哈!我想到了。结果是 grep 有一个退出状态导致了这个。来自 grep 手册页:
EXIT STATUS
The grep utility exits with one of the following values:
0 One or more lines were selected.
1 No lines were selected.
>1 An error occurred.
由于我正在搜索的一些文件不包含匹配项,grep 将 return 退出状态为 1。这有一个非常简单的修复:
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {} || true
find search*.txt | parallel grep TEST2 {} || true
我经常使用 Makefile 来自动执行重复执行的任务。例如,一项任务涉及在不断增长的数据集中搜索正则表达式匹配项。假设我有以下两个文本文件,search1.txt
和 search2.txt
:
search1.txt
:
DSADJKBSDJSA
TEST1
DJKSABVDJSA
search2.txt
:
hvdsjhavdjshavdsa
dsadsadsadsa
TEST3djsabdjhsavdjhsa
TEST2dsajdbsahjdvsa
这是我的 Makefile,用于使用 GNU parallel 并行搜索这些文件。
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {}
find search*.txt | parallel grep TEST2 {}
当我 运行 make search
时,第一行输出正确的数据然后抛出错误并退出,尽管 运行ning 这两行都是自己完成的很好。
> make search
find *.txt | parallel grep TEST1 {}
TEST1
make: *** [search] Error 1
> find *.txt | parallel grep TEST1 {}
TEST1
> find *.txt | parallel grep TEST2 {}
TEST2dsajdbsahjdvsa
> parallel --version
GNU parallel 20160822
我这辈子都弄不明白我做错了什么。它一定是显而易见的,但我已经将其提炼成一个如此简单的小例子,但我仍然对为什么会这样感到困惑。感谢我得到的任何帮助!
啊哈!我想到了。结果是 grep 有一个退出状态导致了这个。来自 grep 手册页:
EXIT STATUS
The grep utility exits with one of the following values:
0 One or more lines were selected.
1 No lines were selected.
>1 An error occurred.
由于我正在搜索的一些文件不包含匹配项,grep 将 return 退出状态为 1。这有一个非常简单的修复:
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {} || true
find search*.txt | parallel grep TEST2 {} || true