如何用grep或循环读取同一文件指定行并写入同一输出文件
文本分组提取解决方案
直接用awk工具就能搞定这个需求,它天生适合处理这类按组提取文本的场景,具体脚本和用法如下:
实现脚本
把下面的代码保存为extract_lines.awk文件:
BEGIN { linia3 = "" } # 匹配行组的结束标记(默认按"数字结尾的行"识别组边界,可根据实际格式修改) /[0-9]+$/ { if (linia3 != "") { print linia3 for (i = 1; i <= count; i++) { print lines[i] } linia3 = "" delete lines count = 0 } next } # 提取当前组的linia3行作为头部 /linia3/ { linia3 = $0 next } # 收集当前组内的linia10-13行 /linia10|linia11|linia12|linia13/ { lines[++count] = $0 } # 处理文件末尾的最后一组 END { if (linia3 != "") { print linia3 for (i = 1; i <= count; i++) { print lines[i] } } }
使用步骤
- 把上面的脚本存好后,执行命令:
awk -f extract_lines.awk testcip.txt > exitcip.txt
关键逻辑说明
- 组边界识别:默认用「以数字结尾的行」作为每组的结束标志,如果你的行组分隔规则不一样(比如固定分隔符行),直接修改
/[0-9]+$/这个正则就行 - 头部处理:遇到含
linia3的行就存为当前组的头部,要是一个组里有多个linia3,只会保留最后一个;要保留第一个的话,把linia3 = $0改成if (linia3 == "") linia3 = $0 - 目标行收集:自动把组内的
linia10/linia11/linia12/linia13行按原顺序存起来,组结束时先输出头部再输出这些行
内容的提问来源于stack exchange,提问作者ubro83
相关产品推荐
相关产品推荐

