首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -文件中行的排序范围

Bash -文件中行的排序范围
EN

Stack Overflow用户
提问于 2017-09-02 20:35:39
回答 2查看 2.3K关注 0票数 3

嗨,大家好,溢出用户。

我想知道如何通过Linux中的终端命令对文件中的一系列行进行排序。

例如,在test.sh文件中:

代码语言:javascript
复制
g++ -o test.out \
Main.cpp \
Framework.cpp \
Sample.cpp \
Blub.cpp \
-std=c++14 -lboost

如何从该文件的第二行到第二行(源文件名)进行排序。

期望产出:

代码语言:javascript
复制
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboost

(按第2-5行排序)

(谢谢你的关注:)

EN

回答 2

Stack Overflow用户

发布于 2017-09-02 21:01:27

当您在vi中编辑文件,并且光标位于Blub.cpp时,您可以输入

代码语言:javascript
复制
:.,+3 !sort

或者当您不想计算行数时,使用另一个范围:

代码语言:javascript
复制
:.,/std/-1 !sort

编辑:从命令行:

代码语言:javascript
复制
ex -c'2,5 sort|w|q' test.sh
票数 2
EN

Stack Overflow用户

发布于 2017-09-02 23:34:04

代码语言:javascript
复制
$ cat test.awk
{ a[NR]=$0 }
END { 
    print a[1]
    lastline=a[NR]
    delete a[1]
    delete a[NR]
    n=asort(a)
    for (i = 1; i <= n; i++) { print a[i] }
    print lastline
}
  • a[NR]=$0:将文件的行加载到数组a中;使用行/记录号(NR)作为数组索引
  • END { ... }:一旦我们将所有行加载到数组中,对数组应用以下命令.
  • print a[1]:打印第1行
  • lastline=a[NR]:在变量lastline中保存最后一行
  • delete a[#]:从数组中删除第一行和最后一行
  • n=asort(a):对数组中的其余行进行排序,将数组项的数量(也称为数组中剩下的行数)分配给变量n
  • for/print:打印第2行-下一行至最后一行
  • print lastline:打印最后一行

现在,针对示例文件运行:

代码语言:javascript
复制
$ awk -f test.awk test.sh
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboost
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46017946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档