在 csh 中排序之前保留文件的 header

keep the header of file before sorting in csh

我有以下 file.rpt:

Data Manhattan Wire Wire
Delay Distance Length Diff[%]
############################# 
0.558 728.282 738.89 1%
0.481 255.258 285.887 12%
0.552 652.888 677.985 4%
0.431 420.896 477.73 14%
0.506 580.288 633.018 9%
0.388 350.22 463.05 32%
0.541 622.088 672.761 8%
0.462 384.064 586.98 53%
0.565 574.016 594.434 4%
0.470 339.268 450.927 33%
0.566 664.304 672.092 1%
0.441 436.428 534.146 22%

我正在尝试对其中一列进行排序并保持 3 行 header 不变。 如何在不操作其他文件的情况下做到这一点?

我尝试了类似下面的操作: head -3 file.rpt ; sort -nrk4,4 file.rpt | -

你可以这样做:

head -3 file.rpt ; tail -n +4 file.rpt | sort -nrk4,4
  • -n: 输出最后X行
  • +4:输出从第 4 行开始。因此跳过前 3 行
  • 使用|tail的输出作为输入发送到sort

结果:

Data Manhattan Wire Wire
Delay Distance Length Diff[%]
############################# 
0.462 384.064 586.98 53%
0.470 339.268 450.927 33%
0.388 350.22 463.05 32%
0.441 436.428 534.146 22%
0.431 420.896 477.73 14%
0.481 255.258 285.887 12%
0.506 580.288 633.018 9%
0.541 622.088 672.761 8%
0.565 574.016 594.434 4%
0.552 652.888 677.985 4%
0.566 664.304 672.092 1%
0.558 728.282 738.89 1%

我想这算不上 csh 答案,但是:

sh -c '{ sed 3q file.rpt; sed 1,3d file.rpt | sort -nrk4,4; }'

csh中,您可以:

( sed 3q file.rpt; sed 1,3d file.rpt | sort -nrk4,4; )