gpt4 book ai didi

linux - 对大型 .txt 或 .csv Linux 的列求和

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:57 26 4
gpt4 key购买 nike

我有一个非常大的 .txt。我需要操作数据以查明存储了多少信息。我基本上需要总结所有单独的数据点。问题是所有数据都存储在列中,我不确定如何运行 Linux 命令来正确地汇总所有数据。

部分文件:

header:                                                                 
seq: 0
stamp:
secs: 1467830307
nsecs: 890825036
frame_id: map
info:
map_load_time:
secs: 0
nsecs: 0
resolution: 0.0500000007451
width: 7200
height: 7200
origin:
position:
x: -180.0
y: -180.0
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
data: [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 ]

实际文件比这大得多,但基本上我需要添加该“数据”集中的所有数字(其他所有内容都可以删除)。提前致谢。

最佳答案

假设您的文件名为 data.txt,我会像这样使用 awk:

awk '
/^data:/ {f=1}
f==1 {gsub(/[a-zA-Z:\[\]]/,""); for(i=1;i<=NF;i++)t+=$i}
END {print t}
' data.txt

一次一行读取文件data.txt。如果它在一行的开头找到单词 data: ,它会设置一个标志 f 所以它“知道” 它已经过去了文件开头的内容,它需要开始对数字进行总计。

下一部分只查看单词 data: 之后的行,因为它的前缀是条件 f==1。这会使用 gsub() 从行中删除所有字母、冒号和方括号。然后循环遍历行中的所有字段(NF 是字段数)并在名为 t 的变量中汇总元素。

在文件末尾,运行以 END 开头的部分并打印总数。

如果你愿意,你可以像这样把它全部写在一行上:

awk '/^data:/{f=1} f==1{gsub(/[a-zA-Z:\[\]]/,"");for(i=1;i<=NF;i++)t+=$i} END{print t}' data.txt

关于linux - 对大型 .txt 或 .csv Linux 的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com