awk - 在图案后提取线条
问题描述
我在一个文件夹中有 50 个文件,并且都有一个共同的模式“^^”。我想打印“^^”之后的所有内容并附加文件名并将所有提取的行打印到一个输出文件中。虽然我的代码适用于单个文件,但它不适用于所有文件。
awk '/\^^/{getline; getline; print FILENAME; print}' *.txt > output
例子
1.txt
ghghh hghg
ghfg hghg hjg
jhhkjh
kjhkjh kjh
^^
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2.txt
hghjhg hgj
jhgj
jhgjh kjgh
jhg
^^
bbbbbbbbbbbbbbbbbbbbbbb
所需的输出.txt
1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2.txt
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
我的实际输出
1.txt
ghghh hghg
1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzz
解决方案
要打印 之后的行^^
,请尝试:
$ awk 'f{print FILENAME ORS $0; f=0} /\^\^/{f=1}' *.txt
1.txt
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2.txt
bbbbbbbbbbbbbbbbbbbbbbb
这个怎么运作:
f{print FILENAME ORS $0; f=0}
如果变量
f
为真(非零),则打印文件名、输出记录分隔符和当前行。然后设置f
回零。/\^\^/{f=1}
如果当前行包含
^^
,则设置f
为 1。
推荐阅读
- javascript - 添加选项以在 JavaScript 中选择字段
- reactjs - React-Native 中的自定义滚动选择器功能
- algorithm - 蒙特卡洛树搜索随机洗牌游戏
- unit-testing - ReferenceError:尝试测试 AsyncStorage 时未定义 __DEV__
- typescript - 使用泛型定义混合类型
- vscode-remote - 是否可以将 kerberos 身份验证与 Visual Studio Code Remote 一起使用?
- xpath - 可以用 Beautiful Soup 的 html5lib 解析器替换 Scrapy 的默认 lxml 解析器吗?
- jqgrid - jqgrid中选择列的文本未导出到excel
- android - 有没有办法防止 Android 应用代码收缩器 R8 更改行号?
- sql-server - 调用存储过程未知对象类型有这个问题