我有一个包含 os 3D 坐标列表的长文本文件。文件的开头由这样的标题组成:
10112
2455
121.417670 172.321300 1.704072
0.997697 0.067831 -0.000222
-0.067831 0.997697 0.000207
0.000236 -0.000191 1.000000
0.997697 0.067831 -0.000222 0
-0.067831 0.997697 0.000207 0
0.000236 -0.000191 1.000000 0
121.417670 172.321300 1.704072 1
之后开始坐标列表。所有的行都由 3 到 7 个数字组成。例如:
0.001686 0.812066 -1.686245 0.074434
0.001695 0.816359 -1.692300 0.087190
0.001699 0.818673 -1.694508 0.097398
...
列表的总长度等于标题前两个数字的乘积 (10112*2455)。这些是 PTX 文件,其中包含来自激光扫描的文本格式的 3D 点。
关键是该文件是标题和坐标的串联,我想拆分文件在标题上破坏它。理想的解决方案是将文件拆分为两个连续的单个整数行。我正在寻找一个通用的解决方案,例如使用 csplit,但 csplit 一次读取一行,因此它无法检测到两个连续的行。
作为最后的手段,我会自己编写一个软件,但如果有的话,我更愿意找到基于 CLI 工具(Awk?)的解决方案。
有什么想法吗?
谢谢
编辑:示例
假设我有一个包含以下内容的文件:
2
3
121.417670 172.321300 1.704072
0.997697 0.067831 -0.000222
-0.067831 0.997697 0.000207
0.000236 -0.000191 1.000000
0.997697 0.067831 -0.000222 0
-0.067831 0.997697 0.000207 0
0.000236 -0.000191 1.000000 0
121.417670 172.321300 1.704072 1
6.001686 0.812066 -1.686245 0.074434
3.001695 0.816359 -1.692300 0.087190
6.001699 0.818673 -1.694508 0.097398
2.001686 0.812066 -1.686245 0.074434
1.001695 0.816359 -1.692300 0.087190
0.001699 0.818673 -1.694508 0.097398
3 <--- cut before this line
1
421.417670 172.321300 1.704072
0.997697 0.067831 -0.000222
-0.067831 0.997697 0.000207
0.000236 -0.000191 1.000000
0.997697 0.067831 -0.000222 0
-0.067831 0.997697 0.000207 0
0.000236 -0.000191 1.000000 0
421.417670 172.321300 1.704072 1
1.001686 0.812066 -1.686245 0.074434
2.001695 0.816359 -1.692300 0.087190
3.001699 0.818673 -1.694508 0.097398
在这种情况下,我应该得到两个文件,在由单个整数组成的两行中的第一行之前剪切。
作为替代方案,知道两个单数行表示有多少个点组成部分,我们可以说第一个输出文件由前 2*3+10=16(10 行标题和 6 行数据)行组成,第二个文件由随后的 3*1+10=13 行组成(标题总是 10 行,这次是 3 行数据)行。