SEGY与SU格式1. 读数据1.1 segy转su2. 转化文件2.1 将su文件转化为sgy文件读数据读取数据存储到txt读取具体的su数据修改某个数据方案一❌方案二❌方案三❌方案四读取segy格式的数据,以文本显示在终端❌
SEGY与SU格式
SEGY数据格式包括三个部分。第一个部分是3200字节的EBCDIC卡片,包括40个卡片(等于每行包含80个字符的40行文本),用来磁带。第二个部分时400个字节的二进制头文件,含有磁带卷内容的信息。SEGY格式的第三个部分是真正的地震道数据。每道有240个字节的道头文件。接下来,是32位的IBM浮点型数据(在IBM Form GA 22-6821中定义)。注意,IBM格式和现代IBM PC上所用的IEEE格式是不同的。
SU数据格式是基于SEGY格式的道部分。SEGY道和SU道的主要不同在于SU格式的道数据是浮点型,是和你运行SU程序的计算机上的浮点格式一致的。SU数据只含有SEGY的道部分!SU格式中不保存EBCDIC和二进制卷头,所以无法在任何SU程序中直接使用SEGY文件。
为了把SEGY数据转成SU程序所用的格式,需要使用segyread。
在SEGY道头里有可选的道头字(字节181-240)。这些道头字的使用没有标准,所以很多人按自己的需要来填写。SU也不例外。有几个SU图形程序使用的参数存储在这些道头字里。程序segyclean会把可选道头字里容易让SU图形程序产生误解的参数清零。
1. 读数据
1.1 segy转su
- 生成地震数据data.su和到道头文件 header和binary,二者文件名为默认。
segyread tape=data.sgy verbose=1 endian=0 > data.su
- segyclean:zero out unassigned portion of header
- conv=0:tells the program not to attempt the IBM to float conversion.
- 标准的segy是IBM
- 当segy文件时IEEE格式,需要设置conv=0
- verbose 表示是否显示读取数据的每一步,=0表示不显示,=1表示显示
- endian =1表示服务器类型, =0表示PC机格式
2. 转化文件
2.1 将su文件转化为sgy文件
# 1) 生成头文件 segyhdrs< data.su //执行完该命令,会在当前的文件夹下出现headr和binary的文件 # 2)格式转换 segywrite< data.su tape=data.segy verbose=1 endian=0 # endian =1表示服务器类型, =0表示PC机格式 segywrite< data-tm-flt-dec-bal-cdp.su tape=data718.segy verbose=1 endian=0
📢📢📢3.5M的su数据变成了128M的segy
读数据
用sustrip程序去掉道头,只保留数据块,然后用xxd程序以16进制格式显示每4个字节的数据,最后用sed程序只显示第一行的输出
# 读取第一道 sustrip < data1.su | xxd -c 4 | sed 1q # 读取第二道 sustrip < data1.su | xxd -c 4 | sed 2q | tail -1
su文件格式的数据,道头信息如下: n1=64 n2=32 d1=0.004000 nt=64 ntr=32 dt=0.004000 ns=64 00000000: 0000 0000 .... 现对该数据的第三道中第二个采样点数据进行修改,将其值改为1535。请使用seismic unix和Linux命令进行修改
读取数据存储到txt
- 这样存储的省略的数据
sustrip < data1.su | xxd -c 4 | sed 2q | tail -1 > data.txt
读取具体的su数据
sushw <data1.su >output14.su key=tracl a=2 b=2 suascii <output14.su >output.txt
a=2
和b=2
表示提取第二道数据。
- 第二行命令使用
suascii
命令将输出SU文件转换为文本文件output.txt
修改某个数据
方案一❌
sushw <LX_SEGY005.su >output.su key=tracl a=2 b=2 | sustatic hdrs="tracl" values="123,456,789" | sushw key=tracl <output.su >modified.su
方案二❌
- 读取该数据
suwind < data1.su key=tracl min=2 max=2 > output.su
- 查看
sustrip < output.su | xxd -c 4 | sed 1q
- 修改
sushw < output.su key=tracl,ns dt=0.004 a=100 > modified.su
sushw < output.su key=tracl,ns dt=0.004 a=0,0,100,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,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 > modified.su
方案三❌
suascii < data1.su > output.txt
sushw < data1.su key=tracl,2,2 a=1535 > file_modified.su
方案四
要修改Seismic Unix(SU)文件格式中的特定道数据,您可以使用以下命令:
- 使用
sustrip
命令将特定道提取为独立的SU文件:
sustrip < data1.su | xxd -c 4 | sed 24q sustrip < data-tm-flt-ac.su | xxd -c 4 | sed 2q | tail -1 sustrip ns=1 < data-tm-flt-ac.su > single_trace.su # suascii <single_trace.su >output.txt
这将提取原始SU文件中的第一道(或您指定的道号)并将其保存为单独的SU文件。
- 修改单独的SU文件中的数据,例如使用文本编辑器或其他编程工具。
- 使用
sushw
命令将修改后的道数据重新插入到原始SU文件中的相应位置:
sushw key=trace a=新数据 < single_trace.su > modified_trace.su
这将修改后的道数据插入到
modified_trace.su
文件中。- 使用
sunull
命令生成与原始SU文件中的其余道数相同的空道:
sunull ns=594 count=1 > null_trace.su
这将生成一个包含空道数据的SU文件,其中道数与原始SU文件中的道数相同。
- 使用
sunhstack
命令将修改后的道数据与空道数据堆叠在一起,形成最终的修改后的SU文件:
sunhstack <(cat modified_trace.su) <(cat null_trace.su) > output.su
这将将修改后的道数据与空道数据堆叠在一起,生成最终的修改后的SU文件。
请注意,这只是一种修改SU文件特定道数据的方法。具体的步骤和命令可能会根据您的数据和需求而有所变化。请根据实际情况进行适当调整。
读取segy格式的数据,以文本显示在终端❌
segyread tape=data1.segy | sugethw key=tracl,dt,ns,fldr,tracf | sed 1q