如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序?

2023-12-21

假设我有一个文件:

ab
aa
c
aaaa

我希望它像这样排序

c
aa
ab
aaaa

即按行长度排序,然后按字母顺序排序。这在 bash 中可能吗?


您可以在每行前面添加行的长度,然后进行数字排序,最后剪掉数字

< your_file awk '{ print length($0), $0; }' | sort -n | cut -f2

你看我已经通过以下方式完成了排序sort -n,无需进行任何多键排序。老实说,我很幸运这有效:

  • 我不认为行可以以数字开头,所以我期望sort -n可以工作,因为如果所有字符串的长度相同,则字母和数字排序会给出相同的结果,就像 exaclty 的情况一样,因为我们按我通过添加的行长度进行排序awk.

  • 事实证明,即使您的输入有以数字开头的行,一切都正常,原因是sort -n

    1. sorts 数字上 on the 前导数字部分线路;
    2. 的情况下ties, 它用strcmp比较整行

    这是一些演示:

    $ echo -e '3 11\n3 2' | sort -n
    3 11
    3 2
    # the `3 ` on both lines makes them equal for numerical sorting
    # but `3 11` comes before `3 2` by `strcmp` before `1` comes before `2`
    
    $ echo -e '3 11\n03 2' | sort -n
    03 2
    3 11
    # the `03 ` vs `3 ` is a numerical tie,
    # but `03 2` comes before `3 11` by `strcmp` because `0` comes before `3`
    

    所以幸运的是,我包括在awk命令插入一个空格(实际上是OFS),即非数字,从而“破坏”数字排序并让strcmp排序启动(在本例中,在数字比较相等的整行上)。

    我不知道这种行为是否是 POSIX,但我正在使用GNU coreutils 8.32's sort。参考我的这个问题 https://stackoverflow.com/q/65302655/5825294 and 这个答案在 Unix 上 https://unix.stackexchange.com/a/382805/164309了解详情。

awk可以自己做所有的事情,但我认为使用sort排序更惯用(例如,use sort to sort)并且高效,正如评论中所解释的(毕竟,你为什么不期望那样sort是 shell 中性能最好的排序工具吗?).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序? 的相关文章

  • 如何将数据通过管道传输到交互式 bash 脚本并将输出通过管道传输到另一个命令?

    我想将数据通过管道传输到交互式命令中 并将交互式命令的输出作为另一个命令的输入接收 例如 我希望能够执行以下操作 echo Zaphod hello sh goodbye sh 并让输出为 再见 你好 赞福德 这是我对此的初步破解 但我遗漏
  • 如何使用ssh直接连接远程docker容器

    我想直接使用 ssh 连接到远程运行的 Docker 容器 通常我可以 ssh i privateKey user host docker ps which will list all running containers docker e
  • R中的函数重新排序和排序值[重复]

    这个问题在这里已经有答案了 我正在尝试以下功能 stest lt data frame group c John Jane James mean c 3 5 1 transform stest group reorder group mea
  • 如何对 HTML 表格进行排序?

    我根本不是 HTML 专家 我对微控制器进行编程并开始切线 我创建了一个 html 文档来显示微控制器寄存器 寄存器地址和寄存器描述的表 我创建了一个包含 3 列和大约 120 行的表 某些寄存器地址是可位寻址的 如果它们的地址以 0 或
  • 通过 bash 从文件中检索电子邮件主题

    我有一个 shell 脚本 它将文件从服务器邮件文件夹下载到 NAS 设备 以便客户端拥有本地备份的副本 文件保存为11469448248 H15587P19346 smtp x14 eu 2 S文件 我已将扩展名更改为标准 eml 格式
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • bash:清理三个文件的外连接,保留文件成员资格

    考虑以下三个文件 其标题位于第一行 file1 id name in1 1 jon 1 2 sue 1 file2 id name in2 2 sue 1 3 bob 1 file3 id name in3 2 sue 1 3 adam 1
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • 如何使用 bash 中提供的工具生成一系列非周末日期?

    我想生成一个文件列表 其中名称包含 filename date 例如file 20111101 file 20120703 开始November 1 2011直到今天 应该不包括周末 Thanks 2011年试试这个 for y in 20
  • 如何对数字进行排序? [复制]

    这个问题在这里已经有答案了 下面是代码 Is the sortNumber对数字进行排序的函数 a 和 b 是什么意思以及为什么存在 为什么sortNumber in n sort sortNumber 没有指定任何参数a and b Ja
  • 不要将变量内容视为 sed 中的特殊字符

    我有以下内容sed命令 sed i 4i CHANGES CHANGELOG rst 然而 我的 CHANGES变量看起来像这样 title list elem elem 因此 上述命令失败并出现以下错误 sed e expression
  • Docker exec linux 终端创建别名

    我有一个正在运行且独立的容器 我想在附加到该容器之前创建一个命令别名 当我连接到容器并输入 alias bar foo 创建别名 并可以通过以下方式检查 alias command 但如果我想做同样的事情码头执行者命令即这样 docker
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • BASH 中的空函数

    我正在使用 FPM 工具创建 deb 包 此工具在从支持的文件中删除包之前 之后创建 不幸的是FPM生成的bash脚本包含这样的函数 dummy 该脚本退出时出现错误 语法错误 意外 BASH 不允许空函数吗 哪个版本的 bash linu
  • 有没有办法在 C 中按多个变量对结构进行排序?

    我必须编写一个对数组中的结构进行排序的函数 结构是 define MAX USERNAME LENGTH 16 typedef struct char username MAX USERNAME LENGTH unsigned int ri
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并

随机推荐

  • 如何在没有数据库的情况下配置 Ruby on Rails?

    对于当前不需要数据库的小型网站项目来说 使用 Ruby on Rails 会很方便 我知道我可以在 MySQL 中创建一个空数据库并从那里开始 但是有人知道在没有数据库的情况下运行 Rails 的更好方法吗 Thanks For Rails
  • 对于矩阵向量乘法,行优先排序是否更有效?

    If M是一个 n x m 矩阵并且v and u是向量 那么就索引而言 矩阵向量乘法看起来像u i sum M i j v j 1 lt j lt m Since v是一个向量 对于面向数值计算的语言 其元素可能存储在连续的内存位置中 如
  • python 在pdf文件中搜索

    这是pdf结构的一部分 5 0 obj lt lt Length 56 gt gt stream BT F1 12 Tf 100 700 Td 15 TL JavaScript example Tj ET endstream endobj
  • matplotlib中如何限制y轴高度?

    如何限制matplotlib图中y轴的高度 我正在尝试显示 x 轴 并降低该一维图的图形高度 我尝试过设置刻度 图形大小 tight layout 边距等 但没有成功 另外 无论我选择什么限制 更改 ylimit 都会跨越整个图形高度 im
  • Maven 故障安全插件不运行并行测试

    我有一个 Maven POM 文件 当我提供并行执行选项时 我在日志中没有看到任何并行执行的迹象 XML 调试让我抓狂 有什么想法这里出了什么问题吗
  • 查找两条曲线之间的重叠面积

    我一直在努力寻找解决方案来找到两条曲线之间的重叠区域 我处理的不是具有已知参数的概率密度函数 而是通过平滑经验数据点获得的曲线 我发现的唯一提示是计算不重叠的区域 如这段代码 来自here https www researchgate ne
  • 使用 python 求解 7000x7000 线性系统时的最佳性能方法

    我需要一种有效的方法来反转 python 中的 7000x7000 空气动力学影响系数 密集 矩阵 在使用 FORTRAN 例程之前 我已经开始使用 LAPACK 中的 LU 分解例程来处理问题 我已经看到它在其他相关应用程序中的使用非常有
  • 用户输入数字时的 Javascript 计算器

    我是 Javascript 新手 但我正在尝试在我的网站上实现一些功能 用户可以在其中输入数量 并且小计会在输入时动态更新 例如 如果每件物品的价格为 10 美元 并且用户在文本字段中键入 5 我希望它在文本框旁边显示 50 美元 非常简单
  • REST - 使用 Spring MVC 返回创建的对象

    我有一个 REST 调用 它接受一个 JSON 对象 比如说一个人 创建此对象 经过验证并保存到数据库 后 我需要返回新创建的 JSON 对象 我认为标准做法是返回201 Accepted而不是立即返回对象 但我的应用程序立即需要新创建的对
  • 有人使用 Sphinx 来记录 C++ 项目吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Sinatra/Ruby 默认一个参数

    有没有办法在 Sinatra 中默认参数 我目前正在寻找是否 start 作为参数传递 但看起来有点hacky 如果我能告诉 Sinatra 在未指定的情况下默认某些参数 那就太好了 get comments do want to setu
  • 选择 html 元素内的文本并更改样式

    text1 div text2 div 我只需要选择 text1 并添加一些样式 I tried body color red 但text1和text2都变成红色 我正在寻找类似的东西 css selector im searching c
  • 使用新的 prefixText 时如何更改 TextInputLayout 的提示填充?

    我尝试过实施TextInputLayout与新的prefixText using com google android material material 1 2 0 alpha02 这是一个非常酷的功能 但是当我添加前缀文本时 提示标签会
  • 为什么 C/C++ 编译器需要在编译时知道数组的大小?

    我知道 C99 以及 C 之前的 C 标准规定 堆栈上数组的大小必须在编译时已知 但这是为什么呢 堆栈上的数组是在运行时分配的 那么为什么大小在编译时很重要呢 希望有人向我解释编译器在编译时将如何处理大小 谢谢 这种数组的示例是 void
  • 具有最小宽度的 3 列布局(固定、流动、固定)

    我在网上搜索过 似乎找不到一个干净 简单 所有浏览器友好的三栏布局 我希望有 3 列布局 左列固定为 200px 右列固定为 200px 中间列保留剩余宽度 但最小宽度为 600px 所以整体最小宽度是 200px 600px 200px
  • 如何访问angular2组件中的全局js变量

    我在下面定义了一个全局 js 变量 Url 是一个 ASP Net MVC html 帮助器 它将转换为字符串值 如何访问 angular2 组件中的 rootVar 我曾经在 Angular 1 5 中使用窗口服务 在 Angular2
  • 使用 ADO.Net 实体模型的优点和缺点

    HI 使用 ADO NET 实体模型作为数据层有哪些优缺点 如果我要使用这项技术 我应该使用 LINQ 吗 Thanks 首先 您不必使用 LINQ 来使用实体框架 EF 但它确实有帮助 EF 基于 EF 团队所称的东西实体SQL 因此 当
  • Linq 合并左连接数据

    假设我有以下数据库 Users UserId PK UserName Roles RoleId PK RoleName UserRoles UserId PK RoleId PK 用户 1 M 用户角色 M 1 角色 使用 LinqToSQ
  • 如何在 Windows 7 GAC 中注册 Assembly .net 4.0?

    您好 我正在使用 vs2010 创建一个 net 4 0 程序集 我假装在 GAC 上注册该程序集 我找不到 gacutil 也不知道如何在 4 0 GAC 上注册程序集 有人可以帮忙吗 找到解决方案 使用位于以下位置的 GacUtil 进
  • 如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序?

    假设我有一个文件 ab aa c aaaa 我希望它像这样排序 c aa ab aaaa 即按行长度排序 然后按字母顺序排序 这在 bash 中可能吗 您可以在每行前面添加行的长度 然后进行数字排序 最后剪掉数字 lt your file