Awk - 多行匹配、打印文件名和匹配

标签 awk

我有以下 awk 命令:

awk -v RS=! -v ORS= '/abc/ && /def/ {print FILENAME;}' files

这会查看文件中的每个文件,用“!”分隔文件中的每条记录,然后将记录与“abc”和“def”匹配。上面的代码将打印文件的名称。如果我删除 {print FILENAME} 如果匹配,它将打印整个记录。

一个文件看起来像:

abc1
bce
bcd
def
!
abc2
bce
def
!

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

file1
abc1

file2
abc2
abc3

我该怎么做?

最佳答案

awk 'FNR==1{print FILENAME} /abc/' file1 file2

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

/abc/ 将匹配所有包含 abc 的行,因为没有指定操作,默认打印整个记录 ($0) .这类似于编写 /abc/{print $0}

file1
abc1

file2
abc2
abc3

关于Awk - 多行匹配、打印文件名和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263450/

相关文章:

r - 合并和删除*文件之间的冗余行

regex - 如何删除当前行中的最后一个单词,但前提是下一行出现模式?

linux - 在文件中查找唯一字符串,向上一行并追加?

linux - Bash - 按列加入(合并)文件

awk gsub 和神秘的 "1"

awk:删除字段为空的行?

awk - awk 中的浮点计算

awk 打印匹配精确的列内容

awk - 在awk中转置两个字段

awk - 如何在awk中用4个零填充十六进制数?