在下面的例子中(原始文件大得多),我如何根据行号 /185/ 和 /215/ 对行进行排序?
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64484 2703340.32982 3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.82197 2703340.51128 3894478.40716 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64992 2703340.34367 3894478.43906 (IGb08)
排序后的行应如下;
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64484 2703340.32982 3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64992 2703340.34367 3894478.43906 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.82197 2703340.51128 3894478.40716 (IGb08)
答案1
sort -t '/' -k 7 -n your_input_file
解释:
-t '/'
定义 '/' 作为字段分隔符-k 7
以第 7 个字段作为排序条件(第一个 '/' 之前的空字段也必须计算在内)-n
指定数字排序。
如果您想要保留第 7 个字段相等的所有行的输入文件的顺序,您可以添加(然后删除)行号作为第二个排序字段:
nl -n rz your_input_file | sort -n -k 7 -k 1 -t '/' | sed 's/^[0-9]*\t//'
解释:
nl -n rz
在每行前添加一个用零填充的行号- 该
sort
命令按第 7 个字段排序,然后按行号排序 - 该
sed
命令删除行号。