извлечение определенных строк между первыми и вторыми повторно похлопавшими строками в текстовом файле

Мой файл данных похож:

#cP2019  6 30  0  0  0.00000000     192 ORBIT IGS14 BHN ESOC                    
## 2060      0.00000000   900.00000000 58664 0.0000000000000                    
+   54   G18G14G13G28G21G11G22G20G16G19G23G02G31G17G12G15G29                    
+        G07G05G25G01G30G24G27G06G09G03G26G08G10G32R10R12R13                    
+        R19R20R01R22R24R23R16R04R08R03R07R02R18R21R09R17R14                    
+        R11R05R15  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         7  4  4  5  5  4  5  5  5  4  4  5  4  4  5  4  5                    
++         4  4  5  5  5  5  4  4  5  6  5  5  5  4  6  6  5                    
++         6  6  6  5  5  6  6  5  5  6  5  6  5  5  5  5  6                    
++         6  6  5  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
%c M  cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc                    
%c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc                    
%f  0.0000000  0.000000000  0.00000000000  0.000000000000000                    
%f  0.0000000  0.000000000  0.00000000000  0.000000000000000                    
%i    0    0    0    0      0      0      0      0         0                    
%i    0    0    0    0      0      0      0      0         0                    
/* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  
*  2019  6 30  0  0  0.00000000  
....... data ......
....... data ......
....... data ......
*  2019  6 30  0 15  0.00000000   
....... data ......
....... data ......
....... data ......
*  2019  6 30  0 30  0.00000000    
....... data ......
....... data ......
....... data ......

and goes on like this ...  

Я должен извлечь строки между первой и второй датой каждого файла данных. Я могу применить следующий код для извлечения этих строк следующим образом:

sed -n '/*  2019  6 30  0  0/,/*  2019  6 30  0 15 /p' esu20601_00.sp3 > extract_1

Но даты и местоположения данных отличаются для каждого файла. Таким образом, я должен извлечь строки между первым * 2019 и второй * 2019 для каждого файла. Как я могу сделать это с помощью кодов?

1
задан 29 November 2019 в 09:10

1 ответ

Могло несомненно быть более сложным, но с примитивными инструментами Python:

#!/usr/bin/env python3
import sys
# open/read file
f = open(sys.argv[1]).read()
# find first line, holding *  2019
first = f.find("*  2019")
# find second line, holding *  2019
nxt = f.find("*  2019", first + 1)
# print out text between the two
text = f[first:nxt].splitlines()[1:]
for l in text:
    print(l)
  • Копия код в пустой файл, сохраните его как findsection.py
  • Выполнение он:

    python3 /path/to/findsection.py <datafile>
    

Вывод (от первого раздела):

....... data ......
....... data ......
....... data ......

, Конечно, Вы могли заставить его собрать данные от целого dir, записать в новый файл и т.д., и т.д.

1
ответ дан 7 December 2019 в 14:55

Другие вопросы по тегам:

Похожие вопросы: