在 Linux 和 Java 中对记录进行排序,但将标头保留在顶部

use*_*123 1 java unix linux sorting shell

我需要按第一列对文件中的记录进行数字排序,但我需要标题保留在文件的顶部。我正在使用 Java 的 Process Builder,但我不熟悉 Linux 命令,所以我做错了。这就是我需要帮助的地方:

Process sort = new ProcessBuilder("/bin/bash", "-c", "((head -n -1 "     +main_file+ " | tail -n -1) | sort -n) >> " + main_file).start();
Run Code Online (Sandbox Code Playgroud)

am1*_*704 5

您不需要 java 来执行 shell 并执行任务,直接在 shell 上运行命令。

见下文

$ cat delitLater.txt
A 1
B 2
C 3
A 4
B 5
C 6
$ awk 'NR==1; NR > 1 {print $0 | "sort -n -k 1,1"}' delitLater.txt
A 1
A 4
B 2
B 5
C 3
C 6
$ awk 'NR==1; NR > 1 {print $0 | "sort -n -k 2,2"}' delitLater.txt
A 1
B 2
C 3
A 4
B 5
C 6
Run Code Online (Sandbox Code Playgroud)

使用 awk ,您可以按原样打印第一行。这是使用 NR(Rownumber) == 1 完成的。对于所有其他行,您可以使用排序命令并指定要使用的列。排序键由“-k”选项定义。“-n”表示数字排序,但您可能需要也可能不需要它,具体取决于文件的内容。