如何将多行服务器列表按同类合并为空格分隔单行?
解决方案
可以使用 awk 命令快速实现按前缀分组并合并为空格分隔的单行,同时支持对pmox系列按数字范围分段输出,完全匹配你的需求:
命令示例
假设你的原始列表保存在 server_list.txt 文件中,先将以下代码保存为 format_servers.awk:
function trim(s) { sub(/^ +/, "", s); return s } { if (/^server/) { servers = servers " " $0 } else if (/^pmox/) { num = substr($0, 5) + 0 # 按数字范围分组:<=10为第一组,11-19为第二组,以此类推 if (num <= 10) bucket = 0 else if (num <= 19) bucket = 1 else if (num <= 29) bucket = 2 else if (num <= 39) bucket = 3 else if (num <= 49) bucket = 4 pmox_buckets[bucket] = pmox_buckets[bucket] " " $0 } else if (/^pc/) { pcs = pcs " " $0 } } END { print trim(servers) for (b=0; b<=4; b++) { if (pmox_buckets[b] != "") print trim(pmox_buckets[b]) } print trim(pcs) }
然后运行命令处理文件:
awk -f format_servers.awk server_list.txt
直接处理命令输出
如果列表来自某个命令的实时输出(比如 your_server_query_command),可以直接通过管道传递:
your_server_query_command | awk -f format_servers.awk
逻辑说明
trim函数:自动去除每组开头的多余空格- 分组规则:
- 所有
server开头的条目合并为单行 pmox开头的条目按数字范围分段(匹配你期望的输出格式)- 所有
pc开头的条目合并为单行
- 所有
- 最终按顺序输出所有分组内容,每组为空格分隔的单行
内容的提问来源于stack exchange,提问作者gern
相关产品推荐
相关产品推荐

