求助:实现Convert wrapped lines to single lines需求,将文件中每3行记录合并为单行
求助:实现Convert wrapped lines to single lines需求,将文件中每3行记录合并为单行
没问题!我来给你几个简单实用的方法,轻松把每3行的记录合并成符合要求的单行格式~
方法一:用awk处理(最推荐,简洁高效)
awk是处理文本块的利器,这个命令可以直接完成你的需求:
awk 'NR%3==1{if(NR>1)print ""; printf "%-16s", $0} NR%3!=1{printf " %s", $0} END{print ""}' your_file.txt
简单解释:
NR%3==1:当行号是3的倍数+1时(也就是每块的第一行,比如第1、4、7行...),如果不是第一块就先换行,然后用printf "%-16s"把编号左对齐占16个字符,保证和后面的数据有足够空格分隔。NR%3!=1:剩下的两行直接把内容追加到当前记录后面。END{print ""}:最后输出一个换行,确保文件末尾格式正确。
方法二:用Shell脚本循环读取
如果你习惯用shell脚本,这个写法更直观,容易理解:
#!/bin/bash # 循环读取每三行 while true; do # 读取第一行(编号行),如果读不到就退出循环 read -r line1 || break # 读取第二行数据 read -r line2 || break # 读取第三行数据 read -r line3 || break # 格式化输出:编号左对齐16位,后面接两行数据 printf "%-16s%s %s\n" "$line1" "$line2" "$line3" done < your_file.txt
把上面的内容保存成merge_lines.sh,给它加执行权限chmod +x merge_lines.sh,然后运行./merge_lines.sh就能得到结果啦。
方法三:用sed命令合并
sed也能完成这个任务,不过写法稍微复杂一点:
:merge N N s/\n/ /g s/^\([0-9]\)/\1 / p d
运行方式是sed -f merge.sed your_file.txt(把上面的sed代码保存成merge.sed),或者直接一行命令:
sed ':a;N;N;s/\n/ /g;s/^\([0-9]\)/\1 /;p;d' your_file.txt
你可以根据自己的习惯选择任意一种方法,替换your_file.txt为你实际的文件名就行~
备注:内容来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

