awk - 递归地从文件中grep每一行
问题描述
我有一个按字母顺序排序的文件names.txt
,其中包含名称:
Dio Brando
Erina Pendleton
Jonathan Joestar
Mario Zeppeli
....
和一个包含文件的文件夹:
a1.txt
a2.txt
....
zn.txt
每个都有Name: phone number
. 假设递归按字母顺序遍历文件,我想从每行 grepnames.txt
并切换到下一个名称,只要它无法在下一个中找到匹配项。
例如:我用 grep 搜索“Dio Brando”,它到达文件中,比如D2.txt
以下几行:
Dio Brando: phone number 1
Dio Brando: phone number 2
Dio Brando: phone number 3
<not Dio Brando>: phone number 1
当我点击 <not Dio Brando> 行时,我希望它开始搜索它停止的“Erina Pendleton”(从D2.txt
以后)。保证找到至少一个匹配,然后当它失败时,它应该切换到“Jonathan Joestar”等。没有一些严肃的脚本是否可能?
如果无法使用下一个名称恢复,只需在整个文件夹的每一行上执行 grep 即可。
解决方案
听起来这可能就是您所需要的:
awk '
BEGIN { nameNr = 1 }
NR==FNR {
names[NR] = $0
next
}
{
if ( index($0,names[nameNr]) ) {
print FILENAME, FNR, $0
found = 1
}
else if ( found ) {
nameNr++
found = 0
}
}
' *.txt
但由于您没有提供示例输入/输出,我们可以用这只是未经测试的猜测进行测试。
推荐阅读
- python - 如何实现 seaborn lmplot 以获得包含每个数据框列的网格图?
- node.js - NodeJS 创建一个从 MongoDB 返回文档的函数
- android - 未定义命名参数“home” - Flutter
- mysql - 访问 QueryDefs 和 SQL 方言
- php - 即使我的路由存在于 route:list 中并且我尝试过 route:clear 和 route:cache,Laravel 路由也不起作用
- javascript - 如何在 for-each 循环中更新 useEffect 中的数组类型状态以不断向状态添加值?
- react-hooks - 在页面渲染完成 React.useEffect 调用之前渲染 React Hook 表单
- android - 如何将 android 应用程序的语言环境更改为阿拉伯语以构建低于 nougat 的版本?
- reactjs - setState 无法处理来自 onClick 侦听器的文件输入
- javascript - Angular中的多个文件上传仅附加一个文件