AWK-多行匹配,打印文件名并进行匹配

DJD*_*son 2 awk

我有以下awk命令:

awk -v RS=! -v ORS= '/abc/ && /def/ {print FILENAME;}' files
Run Code Online (Sandbox Code Playgroud)

这将查找文件中的每个文件,并用“!”分隔文件中的每个记录,然后将记录与“ abc”和“ def”进行匹配。上面的代码将显示文件名。如果删除,{print FILENAME}它将在匹配的情况下打印整个记录。

文件如下所示:

abc1
bce
bcd
def
!
abc2
bce
def
!
Run Code Online (Sandbox Code Playgroud)

我想打印出文件名和与“ abc”匹配的行。例如:

file1
abc1

file2
abc2
abc3
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

nu1*_*73R 5

awk 'FNR==1{print FILENAME} /abc/' file1 file2
Run Code Online (Sandbox Code Playgroud)

FNR字段设置1为读取新文件。FNR==1在每个输入文件的第一行为true时,将执行的操作将在print FILENAME其中打印file1file2

/abc/abc由于未指定任何操作,因此 将匹配包含的所有行,默认情况下将执行整个记录($0)。类似于写作/abc/{print $0}

file1
abc1

file2
abc2
abc3
Run Code Online (Sandbox Code Playgroud)