如何对特定字段使用“排序”命令?

如何对特定字段使用“排序”命令?

在下面的例子中(原始文件大得多),我如何根据行号 /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命令删除行号。

相关内容