我有以下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)
我该怎么办?
awk 'FNR==1{print FILENAME} /abc/' file1 file2
Run Code Online (Sandbox Code Playgroud)
该FNR字段设置1为读取新文件。FNR==1在每个输入文件的第一行为true时,将执行的操作将在print FILENAME其中打印file1并file2
/abc/abc由于未指定任何操作,因此 将匹配包含的所有行,默认情况下将执行整个记录($0)。类似于写作/abc/{print $0}
file1
abc1
file2
abc2
abc3
Run Code Online (Sandbox Code Playgroud)