社区首页 >问答首页 >在awk中将一系列矩阵文件转换为坐标索引

在awk中将一系列矩阵文件转换为坐标索引
EN

Stack Overflow用户
提问于 2013-01-28 17:26:38
回答 1查看 284关注 0票数 4

我有一系列的文件0000.vx.dat,0000.vy.dat,0000.vz.dat;...;0077.vx.dat,0077.vy.dat,0077.vz.dat...每个文件都是一个空格分隔的2D矩阵。我想把每个三元组的文件合并成一个基于坐标的数据格式,即:

时间步长+1 j vy(i,j)

每个文件编号对应于特定的时间步长。考虑到我在这个时间序列中的数据量(~ 4 GB),bash没有削减它,所以似乎是时候去awk了……特别是mawk。在bash中尝试这一点非常愚蠢,但这是我注定要失败的尝试:

代码语言:javascript
代码运行次数:0
复制
for x in $(seq 1 78)
do
  tfx=${tf[$x]} # an array of padded zeros
  for y in $(seq 1 1568)
  do
    for z in $(seq 1 1344)
    do
      echo $x $y $z $(awk -v i=$z -v j=$y "FNR == i {print j}" $tfx.vx.dat) $(awk -v i=$z -v j=$y "FNR == i {print j}" $tfx.vy.dat) $(awk -v i=$z -v j=$y "FNR == i {print j}" $tfx.vz.dat) >> $file
    done
  done
done

编辑:谢谢你,ruakh,感谢你指出我把j保存在shell变量格式中,前面有一个$!这只是原始脚本的一小段,但我猜这将被认为是它的核心!

可以说,这将需要大约六个月的时间,因为bash中的所有内存开销都与O(MxN)算法、子外壳和管道等相关。我最多在一天的时间里寻找更多。每个文件的大小约为18MB,因此应该不会有太大问题。我很乐意在awk中一次执行一个timestep,前提是每个timestep都有一个输出文件。我想,我可以把它们都放在一起,没有太多的后遗症。但是,重要的是,时间步长编号必须是坐标列表中的第一项。我可以通过一个带有-v例程的awk bash参数(见上)来实现这一点。我不知道如何在三个单独的文件中查找矩阵的特定元素,并将它们全部放在一个输出中。这是我想要克服的主要障碍。我希望mawk能在努力和计算速度之间提供一个很好的平衡。如果这对于awk脚本来说似乎太多了,我可以转到更低的级别,并感谢那些回答我的人让我知道我应该直接转到C语言。

提前谢谢你!我真的很喜欢awk,但恐怕我还是个新手。

这三个文件0000.vx.dat、0000.vy.dat和0000.vz.dat的内容如下所示(除了巨大且尺寸正确的文件):

0000.vx.dat:

代码语言:javascript
代码运行次数:0
复制
1 2 3
4 5 6
7 8 9

0000.vy.dat:

代码语言:javascript
代码运行次数:0
复制
10 11 12
13 14 15
16 17 18

0000.vz.dat:

代码语言:javascript
代码运行次数:0
复制
19 20 21
22 23 24
25 26 27

我希望能够输入:

代码语言:javascript
代码运行次数:0
复制
awk -v t=1 -f stackoverflow.awk 0000.vx.dat 0000.vy.dat 0000.vz.dat

并获得以下输出:

代码语言:javascript
代码运行次数:0
复制
1 1 1 1 10 19
1 1 2 2 11 20
1 1 3 3 12 21
1 2 1 4 13 22
1 2 2 5 14 23
1 2 3 6 15 24
1 3 1 7 16 25
1 3 2 8 17 26
1 3 3 9 18 27

编辑:谢谢你,shellter,谢谢你建议我把想要的输入和输出放得更清楚!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 06:15:18

就我个人而言,我使用gawk来处理我的大多数文本文件。但是,既然您已经请求了一个与mawk兼容的解决方案,这里有一种方法可以解决您的问题。在您当前的工作目录中运行:

代码语言:javascript
代码运行次数:0
复制
for i in *.vx.dat; do nawk -f script.awk "$i" "${i%%.*}.vy.dat" "${i%%.*}.vz.dat"; done

script.awk的内容

代码语言:javascript
代码运行次数:0
复制
FNR==1 {
    FILENAME++
    c=0
}

{
    for (i=1;i<=NF;i++) {
        c++
        a[c] = (a[c] ? a[c] : FILENAME FS NR FS i) FS $i
    }
}

END {
    for (j=1;j<=c;j++) {
        print a[j] > sprintf("%04d.dat", FILENAME)
    }
}

当您运行上面的代码时,结果应该是包含坐标的每组三个文件的一个文件。这些输出文件的文件名格式为: timestamp +1 ".dat“。为了方便起见,我决定用四个0来填充这些文件名。但是您可以将其更改为您喜欢的任何格式。这是我从您发布的样本数据中获得的结果。0001.dat的内容

代码语言:javascript
代码运行次数:0
复制
1 1 1 1 10 19
1 1 2 2 11 20
1 1 3 3 12 21
1 2 1 4 13 22
1 2 2 5 14 23
1 2 3 6 15 24
1 3 1 7 16 25
1 3 2 8 17 26
1 3 3 9 18 27
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14567665

复制
相关文章
MySQL设置字段的默认值为当前系统时间
问题产生: 当我们在对某个字段进行设置时间默认值,该默认值必须是的当前记录的插入时间,那么就将当前系统时间作为该记录创建的时间。 应用场景: 1、在数据表中,要记录每条数据是什么时候创建的,应该由数据库获取当前时间自动记录创建时间。 2、在数据库中,要记录每条数据是什么时候修改的,应该而由数据数据库获取当前时间自动记录修改时间。 实际开发: 记录用户的注册时间、记录用户最后登录时间、记录用户的注销时间等。 实现步骤:(如果使用数据库远程工具则直接设置,更简单!!!) 首先将数据表中字段的数据类型设置为TIM
赵小忠
2018/01/24
9.2K0
MySQL字段默认值设置详解
在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字段默认值相关知识。
MySQL技术
2021/03/04
10.5K0
如何在CDH中为Kafka设置流量配额
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 从0.9版本开始,Kafka集群新增了针对生产和消费请求进行配额(quotas)控制。本篇文章Fayson主要介绍如何在CDH中为Kafka设置流量配额。 文档概述 1.环境准备 2.Producer和Consumer流量配额测试 3.总结 测试环境
Fayson
2018/07/13
2.8K0
Hive应用:设置字段默认值 原
当我们清理了一些数据之后,数据的某些字段在数据中是没有的但是需要保留这个字段,那么我们将数据插入中转表中时,就需要给这个字段赋予默认值,来让语句正确执行。
云飞扬
2019/03/13
5.2K0
Python中字段抽取、字段拆分、记录抽取
1、字段抽取 字段抽取是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:slice(start,stop) 注意:和数据结构的访问方式一样,开始位置是大于等于,结束位置是小于。 from pandas import read_csv df = read_csv( 'D:\\PDA\\4.6\\data.csv' ) #默认将电话号码按照数值型来处理了,需要先转换为字符型,astype df['tel'] = df['tel'].astype(str) #运营商 bands = df[
Erin
2018/01/09
3.3K0
layui怎么表格中显示图片&&layui为字段设置默认排序
未经允许不得转载:肥猫博客 » layui怎么表格中显示图片&&layui为字段设置默认排序
超级小可爱
2023/02/20
1.5K0
AWK中的字段,记录和变量【Programming】
本文为awk入门系列的第二篇文章,在本篇文章中,你可以了解到有关字段,记录和一些功能强大的awk变量。
Potato
2019/11/09
2.1K0
AWK中的字段,记录和变量【Programming】
golang中函数如何设置参数默认值
这个问题相当麻烦,根据golang-nuts/google groups中的这篇文章,golang现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的简单,而增加这种额外的支持会使parser变得更复杂。
千灵域
2022/06/17
14.4K0
android在代码中怎么设置 RadioGroup的默认值
这种需求一般是   个人中心 需要的   当用户修改了个人资料之后,下次在修改的话需要从服务器中拿到数据   
wust小吴
2019/07/08
5.2K0
Java去除对象中为null的字段
如果返回的是对象 model 转成的 json,那么 json 中会存在 “xxxx” : null。和前端进行交互时在使用Swagger调试接口的时候会出现接口数据中有 null值,结果很难看:
Jensen_97
2023/07/20
7890
Java去除对象中为null的字段
为字段设置初始值
在开发中为字段设置初始值这是最基本的要求,但是很多开发人员会在构造函数变多的时候忘记给成员变量设置初始值。为了避免这个问题,我们最好在声明的时候直接初始化,而不是在实现构造函数的时候去初始化。编译器会帮助开发人员在每个构造函数开头放入一段代码,这段代码会把开发人员在定义成员字段时所指定的初始值设置给这些成员字段。如果没有显示定义构造函数,那么编译器就会先创建默认构造函数,之后再向其中加入初始化代码。
喵叔
2020/09/08
1.6K0
使用easyui框架中的from表单设置数字默认值和日期默认值
使用easyui框架中的from表单设置数字默认值和日期默认值
Java架构师必看
2021/05/14
4.3K0
使用easyui框架中的from表单设置数字默认值和日期默认值
java中给方法的参数设置默认值,java设置可选参数
今天在调整一个定时任务时需要将固定写死的查询日期通过外部传参来控制,如果没有传值给个默认值,于是了解了下java函数的参数默认值
高久峰
2023/06/29
7.7K0
SAP-如何设置物料移动中的某个字段为必输项?
ANSWER:执行IMG -> Material Management -> Inventory Management and Physical Inventory -> Movement Types -> Copy, Change Movement Types (OMJJ),找到并选中移动类型261,然后在左边的功能树中,选择“Field selection (Enjoy)”,双击打开,如下图:
用户5495712
2019/05/29
4K0
如何在Python 中更优雅的记录日志?
在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样。在使用时我们需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份。但其实个人感觉 logging 用起来其实并不是那么好用,其实主要还是配置较为繁琐。
Python数据科学
2019/10/15
1.1K0
如何在Python 中更优雅的记录日志?
如何在Python中实现高效的日志记录
日志记录是软件开发中的重要组成部分,它可以帮助我们监控程序运行状态、诊断问题和优化性能。本文将详细介绍如何在Python中实现高效的日志记录,并提供详细的代码示例。
华科云商小彭
2023/08/29
4180
如何在Python中实现高效的日志记录
Pulumi 如何在 Windows 环境中设置
没有安装文件, Pulumi 没有安装文件,所以你不能按照下载后安装的方式来进行配置。
HoneyMoose
2021/05/21
2K0
Pulumi 如何在 Windows 环境中设置
swagger中参数为数组dataType的设置
swagger中参数为数组dataType的设置
Java架构师必看
2021/09/22
3.5K0
swagger中参数为数组dataType的设置
点击加载更多

相似问题

相同结构变量的多个声明,好吗?

21

查找具有相同标题的多个窗口

21

共享相同标题的多个布局页

22

将相同的输出写入多个日志

21

多个MKPlacemarks的MKMapView显示相同的标题

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文