Linux下用awk/sed/grep关联提取Hashmode与Speed值,解决分文件行不匹配问题
单命令无中间文件关联提取方案
之前拆分文件合并的逻辑存在两个核心问题:一是grep提取Speed行时会把单卡的Speed.#2、Speed.#3这类中间统计行全部抓入speed.txt,行数和mode.txt完全不对等;二是两次独立读取文件的行序依赖没有全局锚点,自然无法一一对应。全程只需要一条awk命令顺着文件流处理即可,无需生成任何冗余中间文件。
可直接执行的提取命令
awk ' # 遇到Hashmode行时暂存对应字段 /^ Hashmode:/ { mode_str = $2 " " $4 " " $5 } # 遇到全局汇总的Speed.#*行时直接拼接输出 /Speed\.#\*/ { print mode_str " " $2 " " $3 } ' complete.txt
方案逻辑说明
- 处理过程完全顺着文件从上到下的读取顺序走:每碰到一个Hashmode条目,就把条目的编号、算法名暂存在内存变量里,顺着往下读到这个条目对应的全局Speed汇总行时,立刻把两组信息拼接输出,从根本上避免行序错乱
- 自动过滤冗余内容:单卡的Speed.#2、Speed.#3这类中间统计行不会触发输出逻辑,只取目标要求的全局汇总Speed值
- 处理效率不受文件规模影响:哪怕是200组条目、几百MB的统计文件,也可以一次遍历完成所有提取,比拆分两次文件、再合并的流程快一个数量级
拿你提供的测试文件片段做验证,命令输出结果和要求的格式完全一致:
13761 VeraCrypt PBKDF2-HMAC-SHA256 4187 H/s
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

