嗨,大家好,溢出用户。
我想知道如何通过Linux中的终端命令对文件中的一系列行进行排序。
例如,在test.sh文件中:
g++ -o test.out \
Main.cpp \
Framework.cpp \
Sample.cpp \
Blub.cpp \
-std=c++14 -lboost如何从该文件的第二行到第二行(源文件名)进行排序。
期望产出:
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboost(按第2-5行排序)
(谢谢你的关注:)
发布于 2017-09-02 21:01:27
当您在vi中编辑文件,并且光标位于Blub.cpp时,您可以输入
:.,+3 !sort或者当您不想计算行数时,使用另一个范围:
:.,/std/-1 !sort编辑:从命令行:
ex -c'2,5 sort|w|q' test.sh发布于 2017-09-02 23:34:04
$ 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):对数组中的其余行进行排序,将数组项的数量(也称为数组中剩下的行数)分配给变量nfor/print:打印第2行-下一行至最后一行print lastline:打印最后一行现在,针对示例文件运行:
$ awk -f test.awk test.sh
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboosthttps://stackoverflow.com/questions/46017946
复制相似问题