gpt4 book ai didi

linux - 从 Linux 命令行处理复杂的 CSV

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:05 26 4
gpt4 key购买 nike

我有一个复杂的 CSV 文件(here 是外部链接,因为即使是其中的一小部分在 SO 上看起来也不好看),其中一个特定的列可能由多个由空格分隔的列组成。

reset,angle,sine,multiStepPredictions.actual,multiStepPredictions.1,anomalyScore,multiStepBestPredictions.actual,multiStepBestPredictions.1,anomalyLabel,multiStepBestPredictions:multiStep:errorMetric='altMAPE':steps=[1]:window=1000:field=sine,multiStepBestPredictions:multiStep:errorMetric='aae':steps=[1]:window=1000:field=sine
int,string,string,string,string,string,string,string,string,float,float
R,,,,,,,,,,
0,0.0,0.0,0.0,None,1.0,0.0,None,[],0,0
0,0.0314159265359,0.0314107590781,0.0314107590781,{0.0: 1.0},1.0,0.0314107590781,0.0,[],100.0,0.0314107590781
0,0.0628318530718,0.0627905195293,0.0627905195293,{0.0: 0.0039840637450199202 0.03141075907812829: 0.99601593625497931},1.0,0.0627905195293,0.0314107590781,[],66.6556977331,0.0313952597647
0,0.0942477796077,0.0941083133185,0.0941083133185,{0.03141075907812829: 1.0},1.0,0.0941083133185,0.0314107590781,[],66.63923621,0.0418293579232
0,0.125663706144,0.125333233564,0.125333233564,{0.06279051952931337: 0.98942669172932329 0.03141075907812829: 0.010573308270676691},1.0,0.125333233564,0.0627905195293,[],59.9506102238,0.0470076969512
0,0.157079632679,0.15643446504,0.15643446504,{0.03141075907812829: 0.0040463956041429626 0.09410831331851431: 0.94917381047888194 0.06279051952931337: 0.046779793916975114},1.0,0.15643446504,0.0941083133185,[],53.2586756624,0.0500713879053
0,0.188495559215,0.187381314586,0.187381314586,{0.12533323356430426: 0.85789473684210527 0.09410831331851431: 0.14210526315789476},1.0,0.187381314586,0.125333233564,[],47.5170631454,0.0520675034246

为了查看,我正在使用这个技巧 column -s,$'\t' -t < *.csv | less -#2 -N -S这是从Command line CSV viewer借来的升级版本.如果我使用此技巧,则明确说明第 1、2、3...列是什么,以及由特定列中的多个空格分隔数据组成的数据是什么。

我的问题是是否有任何技巧可以操纵如此复杂的 CSV?我知道我可以使用 awk过滤第 5 列,然后从此过滤列再次过滤第 2 列以获得复杂数据的所需部分,但我需要注意在第 5 列之前是否没有另一个组合列(所以我需要实际上是第 6 列而不是第 5 列等) 一些列可能还包含组合和非组合数据的混合。所以awk可能不是正确的工具。

CSV 查看器链接提到了一个名为 csvlook 的工具它作为分隔符添加到输出管道。这可能更容易过滤,因为管道将分隔列,而空格将分隔一列上的组合数据。但我无法运行 csvlook像我对 column 所做的那样,使用多个分隔符(逗号和制表符)所以它没有正确生成数据。最舒适的处理方式是什么?

最佳答案

只要您的输入不包含带有转义嵌入 , 字符的列,您应该能够使用 awk 解析它,使用 , 作为字段分隔符;例如:

awk -F, '{ n = split($5, subField, "[[:blank:]]+"); for (i=1;i<=n;++i) print subField[i] }' file.csv

上面使用 split() 函数将第 5 个字段按空格拆分为子字段。

关于linux - 从 Linux 命令行处理复杂的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293903/

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