Sort

對文件的一部分進行排序

  • May 16, 2019

是否可以在大文件中的兩個字元串之間進行排序?

例如,目前文件為:

   0cf  Front Brake
   0d0  Rear Brake
   0ce  Handle Bars
HUT 03  VR Controls
   009  Vest
   001  Belt
   002  Body Suit
   020  Stereo Enable
   003  Flexor
   007  Hand Tracker
   004  Glove
   006  Head Mounted Display
   008  Oculometer
   00a  Animatronic Device
   000  Unidentified
   021  Display Enable
   005  Head Tracker
HUT 04  Sport Controls
   000  Unidentified
   002  Golf Club
   001  Baseball Bat

所需的輸出如下:

   0ce  Handle Bars
   0cf  Front Brake
   0d0  Rear Brake
HUT 03  VR Controls
   000  Unidentified
   001  Belt
   002  Body Suit
   003  Flexor
   004  Glove
   005  Head Tracker
   006  Head Mounted Display
   007  Hand Tracker
   008  Oculometer
   009  Vest
   00a  Animatronic Device
   020  Stereo Enable
   021  Display Enable
HUT 04  Sport Controls
   000  Unidentified
   001  Baseball Bat
   002  Golf Club

在這裡,HUT 03 VR ControlsHUT 04 Sports Controls部分進行了整理。

在給定的文件中,節標題以非空格字元開頭,而節內容始終以空格或製表符開頭。由於此文件有 100 多個部分,因此在腳本/命令中硬編碼部分名稱是不可行的

在 Python 中:

#!/usr/bin/python3

with open("file.txt", "r") as ins:
   lines = []
   for line in ins:
       if line.startswith((" ", "\t")):
           lines.append(line)
       else:
           lines.sort()
           print(*lines, end = "", sep = "")
           print(line, end = "")
           lines = []
   lines.sort()
   print(*lines, end = "", sep = "")

這會對所有部分(單獨)進行排序,而不僅僅是兩個特定行之間的部分。

為了好玩,這是一種使用以下方法對單個部分進行排序的方法ex

ex file <<%
/HUT
+1,/HUT/-1!sort
w file.sorted
q
%

引用自:https://unix.stackexchange.com/questions/519203