如何识别del_size fq行并将多行内容转换为列格式?
解决方案:将
del_size fq块转换为列格式 没问题!我来帮你搞定这个文本格式转换的需求~你想要把文件中以del_size fq开头的行里的连续数值,转换成清晰的两列键值格式,对吧?
用Awk实现的脚本
这是一个简洁的Awk命令,专门适配你的需求:
awk '/del_size fq/ { if (NR > 1) print "" # 在不同的del_size块之间添加空行分隔,提升可读性 print "del_size fq" # 提取该行中"del_size fq"之后的所有数值,分割成数组 n = split(substr($0, length("del_size fq") + 2), arr, " ") # 每两个数值为一组,按列格式化输出 for (i = 1; i <= n; i += 2) { printf "%-5s %s\n", arr[i], arr[i+1] } }' file.txt
脚本细节解释
- 当匹配到包含
del_size fq的行时,先判断是否为第一行:如果不是,输出空行分隔不同的块 - 先打印标题行
del_size fq,保持每个块的标识清晰 - 用
substr提取标题之后的所有内容,再用split把这些数值分割成数组 - 循环遍历数组,每次取两个元素(一个是标记值、一个是对应数值),用
printf格式化输出成左对齐的两列(%-5s表示左对齐占5个字符宽度,你可以根据数值长度调整这个数值)
示例效果
假设你的file.txt内容是:
del_size fq 0 13452 -1 13034 del_size fq 0 13 -1 0 -2 2155 del_size fq 0 6600 -1 8 -2 0
运行上面的命令后,输出会变成:
del_size fq 0 13452 -1 13034 del_size fq 0 13 -1 0 -2 2155 del_size fq 0 6600 -1 8 -2 0
如果需要调整列的对齐方式或者分隔符,只需要修改printf的格式即可~比如想换成右对齐,把%-5s改成%5s就行。
内容的提问来源于stack exchange,提问作者zhongpingxu
相关产品推荐
相关产品推荐

