我的数据文件如下所示:
#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 ......
当然,您可以让它从整个目录中收集数据,写入新文件等等。