Awk 在多个文件中查找模式并对其执行一些操作

Awk 在多个文件中查找模式并对其执行一些操作,awk,grep,Awk,Grep,我有两个文件-file1.txt和file2.txt。 我想设置一个条件,使命令仅在两个文件中都存在模式“xyz”时才在这两个文件上运行。即使一个文件没有这种模式,该命令也不应该运行。另外,在另一种工作流语言中使用此代码时,我需要将两个文件同时传递给grep或awk命令。 我用grep编写了一些代码,但是即使模式出现在其中一个文件中,这段代码也会执行操作,这不是我想要的。如果有更好的方法,请告诉我 if grep "xyz" file1.txt file2.txt; then

我有两个文件-file1.txt和file2.txt。 我想设置一个条件,使命令仅在两个文件中都存在模式“xyz”时才在这两个文件上运行。即使一个文件没有这种模式,该命令也不应该运行。另外,在另一种工作流语言中使用此代码时,我需要将两个文件同时传递给grep或awk命令。 我用grep编写了一些代码,但是即使模式出现在其中一个文件中,这段代码也会执行操作,这不是我想要的。如果有更好的方法,请告诉我

if grep "xyz" file1.txt file2.txt; then
     my_command file1.txt file2.txt 
else 
     echo " command cannot be run on these files"
fi 

谢谢

这个
awk
应该适合您:

awk-v s='xyz''FNR==NR{
如果($0~s){
++p
下一文件
}
下一个
}
FNR==1{
如果(!p)退出1
}
{
如果($0~s){
++p
出口
}
}
结束{
退出p<2
}'文件1文件2

如果在两个文件中都找到了给定的字符串,则将退出
0
,否则将退出
1

通过以下方式从删除的答案中回收代码:

如果需要运行单个命令,请将其另存为脚本,并在您的条件下运行该脚本

#/垃圾箱/垃圾箱
grep-q“xyz”$1“&grep-q“xyz”$2”
如果您将其保存在
路径中
并将其命名为
grepboth
(保存时不要忘记
chmod a+x grepboth
),您的条件现在可以写入

grepboth file1.txt file2.txt
或者,
grepall
接受搜索表达式和文件列表

#!/bin/sh
what=$1
shift
for file; do
    grep -q "$what" "$file" || exit
done
这可以用作

grepall "xyz" file1.txt file2.txt
这可能有助于:
grepall "xyz" file1.txt file2.txt