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

如何通过CLI工具或Bash代码按人工认定的第5列排序文本

用CLI/Bash按指定人工列排序文本的方法

针对你描述的文本结构(人工认定6列,第1列含1-4个非空格串,其余列均为单个非空格串,需按人工第5列排序),可以用以下几种方法实现:

方法1:简单排序(不严格保留原缩进空白)

适合对文本格式要求不高,仅需内容排序的场景:

awk '{print $(NF-1), $0}' input.txt | sort -n | cut -d' ' -f2-

步骤说明:

  • awk '{print $(NF-1), $0}':提取每行的倒数第二个字段(即人工第5列),将其放在行首作为排序键,后跟原行内容
  • sort -n:按数字顺序排序(若人工第5列是字符串,去掉-n即可)
  • cut -d' ' -f2-:移除行首的排序键,还原原行内容

方法2:保留原格式排序(严格保留缩进和空白)

如果需要完整保留文本原有缩进、空格排版,用空字符作为分隔符避免破坏格式:

awk -v OFS='\0' '{print $(NF-1), $0}' input.txt | sort -n -z | awk -v FS='\0' '{print $2}'

步骤说明:

  • awk -v OFS='\0' '{print $(NF-1), $0}':用空字符(\0)分隔排序键和原行,确保原行空白不被干扰
  • sort -n -z:按数字排序,同时支持空字符分隔的行输入
  • awk -v FS='\0' '{print $2}':按空字符拆分内容,输出原行,完整保留原有排版

示例验证

用你提供的示例文本测试:

输入:

1                 2   3   4   5  6



foo bar               x    y   z   9  z
foo                   z    x   y   3  z
foo bar baz           k    l   m   1  n

执行方法2的命令后,输出会按人工第5列从小到大排序:

1                 2   3   4   5  6



foo bar baz           k    l   m   1  n
foo                   z    x   y   3  z
foo bar               x    y   z   9  z

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:32:47