Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux和Java中,对记录进行排序,但将标题保持在顶部_Java_Linux_Shell_Sorting_Unix - Fatal编程技术网

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

在Linux和Java中,对记录进行排序,但将标题保持在顶部,java,linux,shell,sorting,unix,Java,Linux,Shell,Sorting,Unix,我需要按第一列数字对文件中的记录进行排序,但我需要标题保持在文件的顶部。 我正在使用Java的Process Builder,但我不熟悉Linux命令,所以我做错了一些事情。这就是我需要帮助的地方: Process sort = new ProcessBuilder("/bin/bash", "-c", "((head -n -1 " +main_file+ " | tail -n -1) | sort -n) >> " + main_file).start(); 您不需要

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

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

您不需要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

使用awk,可以按原样打印第一行。这是使用NRRownumber==1完成的。对于所有其他行,使用sort命令并指定要使用的列。排序键由-k选项定义-n表示数字排序,但根据文件的内容,可能需要也可能不需要

执行shell和执行任务不需要java,直接在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

使用awk,可以按原样打印第一行。这是使用NRRownumber==1完成的。对于所有其他行,使用sort命令并指定要使用的列。排序键由-k选项定义-n表示数字排序,但根据文件的内容,可能需要也可能不需要

有什么特别的原因让你从Linux命令行处理文件而不是从Java解析文件吗?是的,我的教授让我使用Linux commands@BJBlackHint:一个好的开始就是不要考虑Java部分。您应该专注于让一系列linux shell命令运行起来;然后你把它推到一个进程构建器调用中。请注意,如果这是您的java代码正在做的唯一事情,那么从java运行它听起来像是一个毫无意义的任务。这不是我的java程序正在做的唯一事情。这只是其中的一小部分,我真的在苦苦挣扎:@Ghostcati有什么特别的原因让你从Linux命令行处理文件,而不是从Java解析文件吗?是的,我的教授让我使用Linux命令@BJBlackHint:一个好的开始就是不考虑Java部分。您应该专注于让一系列linux shell命令运行起来;然后你把它推到一个进程构建器调用中。请注意,如果这是您的java代码正在做的唯一事情,那么从java运行它听起来像是一个毫无意义的任务。这不是我的java程序正在做的唯一事情。这只是我真正挣扎的一小部分:@ghostcat你能给我解释一下吗?我应该在process builder中编写哪个命令@AM1704用推理更新了我的答案,如果你想让我详细说明,请告诉我。需要了解awk语法和排序命令选项-您可以查找这两个命令的手册页。您能给我解释一下吗?我应该在process builder中编写哪个命令@AM1704用推理更新了我的答案,如果你想让我详细说明,请告诉我。需要了解awk语法和排序命令选项-您可以查找这两个命令的手册页。