如何在Unix中通过嵌套循环读取文件并提取指定版本日志
提取指定版本对应的日志内容
我来帮你快速实现这个需求!针对从revisions.txt读取版本号,再从logs.txt提取对应日志的场景,这里有几个实用的命令行工具方案:
方法1:用grep(最简单直接)
grep的-f参数可以直接从文件读取要匹配的模式,再结合-F把版本号当作固定字符串(避免正则表达式的意外匹配),命令如下:
首先如果你的revisions.txt里版本号是空格分隔(比如例子里的APP-1001 APP-1002 APP-1004),先把它转换成每行一个版本号:
tr ' ' '\n' < revisions.txt > revisions_clean.txt
然后执行匹配:
grep -Ff revisions_clean.txt logs.txt
效果说明
针对你给出的示例内容,执行后会输出:
APP-1001 : Bug Fix for XYZ issues
APP-1002 : Bug Fix for XYZ issues
APP-1004 : Bug Fix for XYZ issues
方法2:用awk(更灵活,适合复杂格式)
如果日志格式可能有变化,或者你需要做更多自定义处理,awk是更好的选择。它可以先把所有版本号存入数组,再逐行检查日志:
同样先处理revisions.txt成每行一个版本号(如果是空格分隔的话),然后执行:
awk 'NR==FNR { rev[$0]; next } $1 in rev' revisions_clean.txt logs.txt
命令解释
NR==FNR:当处理第一个文件(revisions_clean.txt)时,把每个版本号作为键存入数组revnext:跳过后续逻辑,继续处理下一行$1 in rev:处理第二个文件(logs.txt)时,检查每行第一个字段是否在rev数组中,如果是就打印整行
额外提示
如果你的revisions.txt本来就是每行一个版本号,那可以跳过tr转换的步骤,直接用原文件执行命令即可。
内容的提问来源于stack exchange,提问作者JBaba
相关产品推荐
相关产品推荐

