请求协助合并输入文件行并按降序生成指定格式输出
问题需求
处理inputfile.txt,将终端行与对应使用率行合并为单行,并按使用率降序输出。
输入输出示例
输入文件
inputfile.txt内容:
TerminalA/admin# 51% used TerminalB/admin# 62% used TerminalC/admin# 42% used
期望输出格式:
TerminalB/admin# 62% used TerminalA/admin# 51% used TerminalC/admin# 42% used
用户尝试的代码
执行命令:
awk -f process1.awk | sort -t: -k1,2rn > output.txt
process1.awk脚本内容:
/^$/ { print " " } !/^$/ { printf("%s ",$0) }
问题分析与修正方案
原方案存在两个核心问题:
- 合并逻辑错误:将所有非空行连续拼接,没有按「终端行+使用率行」的成对关系合并
- 排序参数错误:
sort的分隔符设为:、排序键选1,2,无法正确识别使用率数值进行排序
修正方法:分合并、排序两步处理
步骤1:编写合并行的awk脚本(merge.awk)
# 奇数行(终端行)保存到变量 NR % 2 == 1 { term = $0 } # 偶数行(使用率行)去掉前导空格后,和终端行合并输出 NR % 2 == 0 { gsub(/^[[:space:]]+/, "", $0) print term, $0 }
步骤2:执行合并+排序命令
awk -f merge.awk inputfile.txt | sort -k2,2rn > output.txt
命令解释
merge.awk:通过行号奇偶性配对终端和使用率行,同时清理使用率行的前导空格sort -k2,2rn:按合并后行的第2个字段(即百分比数值)进行数字降序排序,sort会自动识别62%中的数字部分完成排序
内容的提问来源于stack exchange,提问作者anukalps
相关产品推荐
相关产品推荐

