Linux下提取filename.txt指定标识后数据的AWK/SED实现需求
提取文件中指定标识后的对应数据(Linux环境)
方法1:用AWK实现(推荐,逻辑更清晰)
AWK能轻松处理这种“先捕获前一个标识内容,再匹配后一个标识输出对应组合”的需求,直接用变量暂存33A::ISN的数据,遇到16E的行时组合输出:
# 假设33A::ISN和其后的数据是空格分隔(比如行是"xxx 33A::ISN ABC123 xxx") awk '/33A::ISN/{isn=$2} /16E:AVVV\/\/FMMM\//{price=substr($0, index($0,"16E:AVVV//FMMM/")+17); print isn","price}' filename.txt
如果33A::ISN和数据是连在一起的(比如"xxx33A::ISNABC123xxx"),把获取isn的部分改成:
/33A::ISN/{isn=substr($0, index($0,"33A::ISN")+8)}
方法2:用SED实现(利用保持空间处理上下文)
SED需要借助保持空间暂存33A::ISN的数据,再和16E的内容组合:
命令说明:
- 匹配到
33A::ISN的行时,先把整行存入保持空间,然后删除标识前面的内容只保留对应数据,再交换保持空间和模式空间(保持空间留着ISN数据,模式空间恢复原行)。 - 匹配到
16E:AVVV//FMMM/的行时,把保持空间的ISN数据追加到当前行后,将标识替换成逗号、去掉换行符,最后打印组合后的结果。
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

