Linux行合并需求求助:实现两种指定格式的行内容整合
实现两种格式的命令行解决方案
第一种格式:合并关联行到单行
使用awk脚本将每个主条目及其后续的详细行合并为一行:
awk ' /^[0-9]/ { if (main != "") print main main = $0 sub(/[[:space:]]+$/, "", main) next } { sub(/^[[:space:]]+/, "", $0) main = main " " $0 } END { print main }' input.txt
说明:
- 当遇到以数字开头的行(主条目)时,先打印之前保存的合并行(如果存在),然后将当前行作为新的主行保存(并去除末尾空格)。
- 对于缩进的详细行,去除开头空格后追加到当前主行末尾。
- 最后打印剩余的合并行。
第二种格式:填充缺失的前两列
使用awk脚本自动填充每行缺失的第一、第二列内容:
awk ' /^[0-9]/ { num = $1 code = $2 print $0 next } { sub(/^[[:space:]]+/, "", $0) printf "%-2s %-4s %s\n", num, code, $0 }' input.txt
说明:
- 遇到以数字开头的行时,保存当前的第一列(编号)和第二列(代码),并直接打印该行。
- 对于缩进的详细行,去除开头空格后,用保存的编号和代码填充前两列,再打印完整内容。
printf的格式化参数%-2s和%-4s确保前两列左对齐并保持固定宽度,与示例格式一致。
内容的提问来源于stack exchange,提问作者Prayag
相关产品推荐
相关产品推荐

