打印匹配 awk 脚本的文件名

罗伯特·马克·布拉姆

继我之前的问题

我有多个文本文件,这些文件可能有也可能没有用虚线包围的重复文本组。输出中不应包含所有 lorem ipsum 文本。

$ cat /tmp/testAwk/file1.txt


--------------
important text one
important text two
--------------

Lorem ipsum dolor sit amet
consectetur adipiscing elit

--------------
important text three
important text four
--------------

sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua

Ut enim ad minim veniam
quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat


$ cat /tmp/testAwk/file2.txt
Duis aute irure dolor in reprehenderit

--------------
important text one
important text two
--------------

in voluptate velit esse cillum dolore
eu fugiat nulla pariatur

non proident, sunt

--------------
important text three
important text four
--------------

Excepteur sint occaecat cupidatat

$ cat /tmp/testAwk/file3.txt
consequuntur magni dolores
sed quia non numquam

Quis autem vel eum iure reprehenderit

我试图用来awk捕获两行之间的文本--------------并打印出与模式匹配的文件的名称。

我接受了@Ed Morton 对我上一个问题的精彩回复:https ://stackoverflow.com/a/55507707/257233

awk '{x=sub(/^-+$/,"")} f; x{f=!f}' *.txt

我试图调整它以打印出与模式匹配的文件的文件名并缩进结果。我不知道如何做的整个工作awk,所以我结束了一些grep,并sed在那里。

$ awk 'FNR==1{print FILENAME} {x=sub(/^-+$/,"---")} f; x{f=!f}' $(grep -E '^-+$' /tmp/testAwk/*.txt -l) | sed -re 's/^([^\/])/   \1/'
/tmp/testAwk/file1.txt
   important text one
   important text two
   ---
   important text three
   important text four
   ---
/tmp/testAwk/file2.txt
   important text one
   important text two
   ---
   important text three
   important text four
   ---

我可以只用 awk 来做上面的事情吗?

埃德·莫顿

这是我的做法,特别是因为您的用例似乎正在发展以需要更多功能,因此将其塞进一个简短的单行代码并不是最好的方法:

$ cat tst.awk
FNR==1 { delimCnt=inBlock=block="" }
/^-+$/ {
    inBlock = (++delimCnt % 2)
    if ( !inBlock ) {
        if (delimCnt > 1) {
            if (delimCnt == 2) {
                print FILENAME
            }
            print block "   ---"
        }
        block = ""
    }
    next
}
inBlock { block = block "   " $0 ORS }

.

$ awk -f tst.awk file1.txt file2.txt file3.txt
file1.txt
   important text one
   important text two
   ---
   important text three
   important text four
   ---
file2.txt
   important text one
   important text two
   ---
   important text three
   important text four
   ---

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

awk:匹配文件末尾后打印行

来自分类Dev

如何使用awk打印路径文件名的尾部

来自分类Dev

如何在awk中打印文件名?

来自分类Dev

awk / sed文件名添加到模式匹配

来自分类Dev

zgrep 列并打印匹配的文件名

来自分类Dev

使用awk打印从匹配到文件结尾的行

来自分类Dev

匹配模式并使用awk或grep打印文件中的相应列

来自分类Dev

在文件中打印特定匹配值的 awk 参数

来自分类Dev

awk 匹配两个文件并打印所需的输出

来自分类Dev

用多行正则表达式awk;根据awk匹配输出文件名

来自分类Dev

AWK处理压缩文件并打印原始(压缩)文件名

来自分类Dev

AWK处理压缩文件并打印原始(压缩)文件名

来自分类Dev

bash:awk将每个匹配项写入文件并增加文件名

来自分类Dev

删除与某些文件名不匹配的文件的脚本

来自分类Dev

awk比较2个文件,打印匹配行和不匹配行

来自分类Dev

awk比较2个文件,打印匹配行和不匹配行

来自分类Dev

用awk并行循环两个文件,打印匹配和不匹配

来自分类Dev

使用AWK打印匹配的图案

来自分类Dev

AWK仅打印匹配的单词

来自分类Dev

AWK:打印与图案匹配的线

来自分类Dev

打印与模式匹配的文件的文件名和行号

来自分类Dev

问题:将文件名与脚本中的数字匹配吗?

来自分类Dev

打印文件名

来自分类Dev

ripgrep:仅打印匹配模式的文件名

来自分类Dev

如果文件名与模式不匹配,请打印

来自分类Dev

如何修改我的 awk 脚本,以便使用文本文件作为输入打印匹配的正确值?

来自分类Dev

awk脚本列出具有指定文件名的文件

来自分类Dev

AWK - 如何从多个文件中提取匹配项,包括文件名的一部分

Related 相关文章

热门标签

归档