$head model-q-060.txt
% x y
15.0 0.0
15.026087 -1.0
15.052174 -2.0
15.07826 -3.0
15.104348 -4.0
15.130435 -5.0
15.156522 -6.0
15.182609 -6.9999995
15.208695 -8.0
数据包含3或4次模拟运行,所有运行都存储在一个文本文件中,两次运行之间没有分隔符.换句话说,没有空行或任何东西,例如如果每次运行只有3个“记录”,那么3次运行将看起来像这样:
$head model-q-060.txt
% x y
15.0 0.0
15.026087 -1.0
15.052174 -2.0
15.0 0.0
15.038486 -1.0
15.066712 -2.0
15.0 0.0
15.041089 -1.0
15.087612 -2.0
对于那些感兴趣的人来说,这是一个COMSOL Multiphysics输出文件.在视觉上,您可以知道新的运行数据从何处开始,因为第一个x值被重复(实际上,所有第二行的所有值都相同).因此,我需要首先打开文件并获取此x值,将其保存,然后将其用作与awk或csplit匹配的模式.我正在努力解决这个问题!
csplit将完成这项工作:
$csplit -z -f 'temp' -b '%02d.txt' model-q-060.txt /^15\.0\\s/ {*}
但我必须知道要分割的模式.这个问题是相似的,但是我的每个文本文件都可能具有不同的模式来匹配:Split files based on file content and pattern matching.
本
解决方法:
这是一个简单的awk脚本,它将执行您想要的操作:
BEGIN { fn=0 }
NR==1 { next }
NR==2 { delim=$1 }
$1 == delim {
f=sprintf("test%02d.txt",fn++);
print "Creating " f
}
{ print $0 > f }
>初始化输出文件号
>忽略第一行
>从第二行提取定界符
>对于第一个标记与定界符匹配的每个输入行,设置输出文件名
>对于所有行,写入当前输出文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。