使用Bash过滤gzip文件 保留latitude行后前三行数字内容
Bash实现方案
你可以通过awk配合管道直接输出到gzip完成处理,无需生成中间临时文件。
假设源文件名为raw.txt,最终要生成的gzip文件名为result.gz,执行以下命令即可:
awk ' /^latitude:/ { print keep_num = 3 next } keep_num > 0 && /^[0-9]+$/ { print keep_num-- next } !/^[0-9]+$/ { print } ' raw.txt | gzip > result.gz
逻辑说明
- 匹配到以
latitude:开头的行时,正常打印该行,同时设置计数器keep_num为3,代表后续要保留3行数字内容 - 当计数器大于0且当前行是纯数字内容时,打印该行,计数器减1
- 所有非数字内容全部正常打印,计数器归零后的纯数字内容会被直接过滤
如果需要校验输出是否符合预期,执行zcat result.gz即可查看解压后的文件内容。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

