gpt4 book ai didi

bash - awk:多个CSV文件中的多列数据的数学运算

转载 作者:行者123 更新时间:2023-12-03 16:30:39 25 4
gpt4 key购买 nike

我正在研究bash脚本,该脚本循环多列数据填充并执行集成的AWK代码以与多列数据一起操作。

#!/bin/bash
home="$PWD"
# folder with the outputs
rescore="${home}"/rescore
# folder with the folders to analyse
storage="${home}"/results


while read -r d; do
awk -F ", *" ' # set field separator to comma, followed by 0 or more whitespaces
FNR==1 {
if (n) { # calculate the results of previous file
f= # apply this equation to rescore data using values of $3 and $2
f[suffix] = f # store the results in the array
n=$1 # take ID of the column
}
prefix=suffix=FILENAME
sub(/_.*/, "", prefix)
sub(/\/[^\/]+$/, "", suffix)
sub(/^.*_/, "", suffix)
n = 1 # count of samples
min = 0 # lowest value of $3 (assuming all $3 < 0)
}
FNR > 1 {
s += $3
s2 += $3 * $3
++n
if ($3 < min) min = $3 # update the lowest value
}
print "ID" prefix, rescoring
for (i in n)
printf "%s %.2f\n", i, f[i]
}' "${d}_"*/input.csv > "${rescore}/"${d%%_*}".csv"
done < <(find . -maxdepth 1 -type d -name '*_*_*' | awk -F '[_/]' '!seen[$2]++ {print $2}')
简而言之,工作流程应处理位于$ {d}文件夹中的input.csv的每一行,这些行已由我的bash脚本正确识别:
# input.csv located in the folder 10V1_cne_lig12
ID, POP, dG
1, 142, -5.6500 # this is dG(min)
2, 10, -5.5000
3, 2, -4.9500
4, 150, -4.1200
我的AWK脚本应处理每个CSV文件的每一行,以将它们减少到两列,并保留在输出中:i)输入的第一列中的数字。csv(已处理行的包含ID)+文件夹名称($ d)包含CSV文件,以及ii)对input.csv的POP和dG列中的数字应用数学运算的结果(f):
f(ID)= sqrt(((dG(ID)+10)/10)^2+((POP(ID)-240)/240))^2)
其中dG(ID)是input.csv的“已评分”行的dG($ 3)的值,而POP(ID)是其POP值($ 2)。最终output.csv包含有关1个input.csv的信息格式如下:
# output.csv
ID, rescore value
1 10V1_cne_lig12, f(ID1)
2 10V1_cne_lig12, f(ID2)
3 10V1_cne_lig12, f(ID3)
4 10V1_cne_lig12, f(ID4)
虽然我的代码的bash部分(处理不同目录中的CSV循环)可以正常工作,但我仍停留在AWK代码中,该代码无法正确分配行的ID,以便可以使用$ 2和$ 3应用演示的数学运算具有精确ID的行的所有列。

最佳答案

给定输入文件:文件夹/文件

ID, POP, dG
1, 142, -5.6500
2, 10, -5.5000
3, 2, -4.9500
4, 150, -4.1200
这个脚本
$ awk -F', *' -v OFS=', ' '
FNR==1 {path=FILENAME; sub(/\/[^/]+$/,"",path); print $1,"rescore value"; next}
{print $1" "path, sqrt((($3+10)/10)^2+(($2-240)/240)^2)}' folder/file
会产生
ID, rescore value
1 folder, 0.596625
2 folder, 1.05873
3 folder, 1.11285
4 folder, 0.697402
不确定代码的其余部分做什么,但是我想您可以将其集成到其中。

关于bash - awk:多个CSV文件中的多列数据的数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67489194/

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