You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash下按非空格字符数排序并保留空格的单命令实现

按非空格字符数排序并保留原空格的Bash命令

要实现按非空格字符数排序且保留原行空格的需求,你之前的命令问题在于用gsub直接修改了原行内容(删除了空格),导致输出丢失格式。以下是正确的单条Bash命令:

awk '{cnt = length(gensub(/ /, "", "g")); print cnt, $0}' file.txt | sort -n | awk '{print $1, substr($0, index($0, $2))}'

命令解释:

  1. 第一个awk:通过gensub(/ /, "", "g")生成去除所有空格的临时字符串,用length()获取其长度(即非空格字符数),然后将该计数与原行内容一起输出——这里原行的空格完全保留。
  2. sort -n:按计数的数值大小升序排序,必须加-n参数避免字符串排序的错误(比如"10"不会排在"2"前面)。
  3. 第二个awk:提取排序后每行的计数和原行内容,通过substr($0, index($0, $2))获取从第二个字段开始的原行文本,再与计数拼接输出,确保原空格格式不变。

原文件内容:

a b c 
abcde
ab cd ef
abcdefg
a
a b

执行正确命令后的输出:

1 a 
2 a b
3 a b c 
5 abcde
6 ab cd ef
7 abcdefg

内容的提问来源于stack exchange,提问作者Zak Stratton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:15:23