gpt4 book ai didi

linux - 如何编写脚本对多个 csv 文件执行一些基本操作

转载 作者:行者123 更新时间:2023-11-29 09:14:24 25 4
gpt4 key购买 nike

我有一个文件夹,里面有多个 csv 文件,逐渐命名(从 00000.csv 开始,向上通用 #####.csv)。每个 csv 文件有 4 列和可变的行数 N。

我想做的是编写某种类型的脚本以放置在文件夹中,并且在执行时逐步读取每个 csv 文件,并且在每一步 - 对于第 i 个 csv 文件 - 将所有第三列中的 N 个值以获得值 t 然后第四列中的所有 N 个值以获得值 q 然后计算最终值 sqrt(t^2 + q^2) 并将其打印在文件(例如 txt)的第 i 行,将在所有 csv 文件所在的同一文件夹内生成。

我想要一些自动化的东西,一种运行后忘记它的方法,而不仅仅是每次都更改的命令。


听从@Ed Morton 的建议,我把到目前为止我设法写的代码放在这里:

#!/bin/bash
shopt -s nullglob
for f in *.csv
do
cat "$f" | awk -F "," '{sum3 += $3} {sum4 += $4} {final = sqrt(sum3^2 + sum4^2)} END {print final}' > result.txt
done

看起来它以某种方式成功地完成了我需要的事情,但问题是它只显示最后一个 csv 文件的正确值,因为它不断覆盖前一个文件。


假设我有以下 #####=3 个 csv 文件:

00000.csv

1.817675, 0.859327, 0.959465, 0.281827
4.264659, 3.040230, -0.787732, -0.616018
3.645565, 2.943500, -0.424509, -0.905424
0.603874, 3.858309, -0.302506, -0.953147
0.056403, 0.410131, 0.941520, 0.336956

00001.csv

1.762620, 0.775846, -0.550544, -0.834806
4.364223, 3.049563, 0.995636, 0.093324
3.675804, 2.848182, 0.302385, -0.953186
0.696330, 3.820203, 0.924550, -0.381060
0.154763, 0.428169, 0.983598, 0.180376

00002.csv

1.781079, 0.677564, 0.184586, -0.982816
4.264546, 3.057596, -0.996768, 0.080330
3.718724, 2.757861, 0.429205, -0.903207
0.733074, 3.913208, 0.367446, 0.930045
0.088634, 0.353155, -0.661285, -0.750135

最后我想得到的是下面的result.txt文件:

结果.txt

1.895572658137904
3.262622157794096
1.761036700624096

例如,在哪里

1.895572658137904 = sqrt[ (0.959465-0.787732-0.424509-0.302506+0.941520)^2 + (0.281827-0.616018-0.905424-0.953147+0.336956)^2 ]

其他值依此类推。

最佳答案

将 GNU awk 用于 ENDFILE 并使用您提供的示例输入/输出进行测试:

awk -F ',' '
{ sum3 += $3; sum4 += $4 }
ENDFILE { printf "%.15f\n", sqrt(sum3^2 + sum4^2); sum3=sum4=0 }
' *.csv
1.895572658137904
3.262622157794095
1.761036700624095

和任何awk:

awk -F ',' '
{ sum3[FILENAME] += $3; sum4[FILENAME] += $4 }
END {
for (i=1; i < ARGC; i++) {
fname = ARGV[i]
printf "%.15f\n", sqrt(sum3[fname]^2 + sum4[fname]^2)
}
}
' *.csv
1.895572658137904
3.262622157794095
1.761036700624095

关于linux - 如何编写脚本对多个 csv 文件执行一些基本操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172837/

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