提取文本文件中第一个和第二个重复字符串之间的特定行

提取文本文件中第一个和第二个重复字符串之间的特定行

我的数据文件如下所示:

#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

毫无疑问可能会更复杂,但使用原始的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 ......

当然,您可以让它从整个目录中收集数据,写入新文件等等。

相关内容