🧠

Res SU (7)SU读数据

SEGY与SU格式

notion image
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
notion image
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=2b=2表示提取第二道数据。
  • 第二行命令使用suascii命令将输出SU文件转换为文本文件output.txt
notion image
 

修改某个数据

方案一❌

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

方案二❌

  1. 读取该数据
suwind < data1.su key=tracl min=2 max=2 > output.su
  1. 查看
sustrip < output.su | xxd -c 4 | sed 1q
  1. 修改
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)文件格式中的特定道数据,您可以使用以下命令:
  1. 使用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文件。
  1. 修改单独的SU文件中的数据,例如使用文本编辑器或其他编程工具。
  1. 使用sushw命令将修改后的道数据重新插入到原始SU文件中的相应位置:
sushw key=trace a=新数据 < single_trace.su > modified_trace.su
这将修改后的道数据插入到modified_trace.su文件中。
  1. 使用sunull命令生成与原始SU文件中的其余道数相同的空道:
sunull ns=594 count=1 > null_trace.su
这将生成一个包含空道数据的SU文件,其中道数与原始SU文件中的道数相同。
  1. 使用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