AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 692920
Accepted
Ar Rakin
Ar Rakin
Asked: 2022-03-05 04:37:44 +0800 CST2022-03-05 04:37:44 +0800 CST 2022-03-05 04:37:44 +0800 CST

如何在 n 行之后对文件内容进行排序?

  • 772

在 linux 中,我们可以运行sort命令对文件内容进行排序,但在我的情况下,我有以下文件(THANKS.txt):

These people have contributed to OSN Envoy. We always try to keep this list updated and correct. 
If you notice that your name is not listed here, then feel free to contact us.

Ar Rakin
Peter Williamson
David Brook
Bill Natt

此文件包含软件项目的贡献者列表。

我只想使用sort命令按字母顺序对名称进行排序,有什么想法吗?

sort text
  • 3 3 个回答
  • 146 Views

3 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2022-03-05T05:03:12+08:002022-03-05T05:03:12+08:00

    与awk:

    awk '
      NR == 1, NF == 0 {
        # print and skip all lines until the first blank
        # one (one where the Number of Fields is 0)
        print; next
      } 
    
      {print | "sort"} # pass the rest to sort
      ' < file
    

    替换NF == 0为NR == 3在第三行而不是在第一个空白行处停止。

    为了避免其余的都通过awk和sort(也避免运行额外的 shellawk来解释那个琐碎的sort命令行),你可以这样做:

    {
      sed '/[^[:blank:]]/!q'
      sort
    } < file
    

    sed q找到第一行不 ( !) 包含非空白字符的地方。在第三行更改为sed 3quit 。q

    如果输入不可搜索(例如来自管道时),sed但是将无法将光标留在文件中该行的分隔符之后,这意味着sort将错过sed可能已读取的额外数据(如它以较大的块读取其输入)。

    使用 GNU 实现sed,您可以添加-u选项,使其一次读取其输入一个字节,以免读取过多。

    • 3
  2. they
    2022-03-05T04:54:20+08:002022-03-05T04:54:20+08:00

    这会给你一个名字列表,排序:

    sed '1,/^$/d' <THANKS.txt | sort
    

    管道用于sed删除从第一行到第一个空行的所有内容,并将其余部分传递sort给排序。如果这更容易,您也可以使用空行的行号代替正则表达式 address /^$/,在此答案的上方和其他命令中。

    文件的初始部分可以由

    sed '1,/^$/!d' <THANKS.txt
    

    该命令实质上反转了d命令的条件,sed以便它删除名称列表而不是提取名称列表。

    这两个命令一起可以用来解决整体问题,创建THANKS-sorted.txt输出文件:

    { sed '1,/^$/!d' <THANKS.txt; sed '1,/^$/d' <THANKS.txt | sort; } >THANKS-sorted.txt
    

    或者,使用更好的格式:

    {
        sed '1,/^$/!d' <THANKS.txt
        sed '1,/^$/ d' <THANKS.txt | sort
    } >THANKS-sorted.txt
    

    与ed编辑器:

    printf '%s\n' '1,/^$/ p' '+,$ w !sort' 'q' | ed -s THANKS.txt >THANKS-sorted.txt
    

    这使用如下所示的ed编辑脚本:

    1,/^$/ p
    +,$ w !sort
    q
    

    这个编辑脚本输出前几行,直到第一个空行。然后它将从空行之后的下一行到文档末尾的所有行写入到sort,输出排序后的名称。

    最后q退出编辑器,最后的重定向将结果文本写入THANKS-sorted.txt.

    • 2
  3. RudiC
    2022-03-05T04:55:05+08:002022-03-05T04:55:05+08:00

    如果head命令没有关闭stdin(它不在 linux 上),请尝试

    { head -n2; sort; } < file
    These people have contributed to OSN Envoy. We always try to keep this list updated and correct. 
    If you notice that your name is not listed here, then feel free to contact us.
    
    Ar Rakin
    Bill Natt
    David Brook
    Peter Williamson
    

    如果标准输入由 关闭head,请尝试类似

    { read TMP; echo "$TMP"; read TMP; echo "$TMP"; sort; } < file
    These people have contributed to OSN Envoy. We always try to keep this list updated and correct.
    If you notice that your name is not listed here, then feel free to contact us.
    
    Ar Rakin
    Bill Natt
    David Brook
    Peter Williamson
    
    • 0

相关问题

  • 数字排序无法正确排序文件

  • 将字符串插入文本文件中的列表变量 [使用 sed]

  • 如何对文件中每个日期的行数进行排序?

  • 列出根据特定内容行排序的文件

  • 读取带有单词的文本文件及其出现次数和排序的打印输出

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve