使用 Awk 对 csv 中的所有单元格求和
Use Awk to sum all cells in a csv
我有一堆 csv 文件,每个文件都是一个 84 x 84 的数字矩阵。我正在尝试使用 awk 对所有单元格求和(以生成一个数字)。到目前为止,我所能想到的只是以下内容,它可以一次对单个列(例如,第 75 列)求和,但不能将所有列加在一起:
awk -F ',' '{sum += } END {print sum}' file_name.csv
然后,我想在同一目录中创建一个新的 csv 文件,其中每一列都是前一个 csv 中该列的总和除以前一个 awk 命令生成的总和。所以换句话说,一个只有 1 行的 csv,其中每一列都有一个数字,即列 sum/total 总和。
非常感谢任何帮助!
如果所需的最终输出只是一个单行 CSV 文件,其中列总和除以输入中每一列的总和,那么这应该用一个 awk
命令完成.
{
for (i = 1; i <= NF; i++)
{
colsum[i] += $i
totsum += $i
if (NF > maxfld)
maxfld = NF
}
}
END {
pad = ""
for (i = 1; i <= maxfld; i++)
{
printf("%s%.2f", pad, colsum[i] / totsum)
pad = ","
}
print ""
}
我会将其存储在 script.awk
和 运行 等文件中:
awk -F, -f script.awk data
给定样本输入(8 行 8 列)— 一组 10 到 99 之间的随机数:
34,98,18,16,62,86,21,37
39,10,62,33,81,16,70,36
23,23,56,16,86,82,30,74
18,10,42,46,99,93,83,76
90,10,76,50,12,24,13,96
11,40,89,92,31,71,25,90
87,82,33,24,32,25,98,17
86,50,70,33,93,30,98,67
输出是:
0.12,0.10,0.13,0.09,0.15,0.13,0.13,0.15
显然,您可以调整用于显示最终值的格式;我选择了 2 位小数,但你可以选择任何你喜欢的格式。
题目问的是84x84的矩阵;此代码也适用于此类矩阵。矩阵不必是正方形的。输入数据甚至不必在每一行中具有相同数量的字段。您可以添加验证以坚持任一条件或两者。如果您需要中间结果文件,您也可以安排此代码生成它们。
我有一堆 csv 文件,每个文件都是一个 84 x 84 的数字矩阵。我正在尝试使用 awk 对所有单元格求和(以生成一个数字)。到目前为止,我所能想到的只是以下内容,它可以一次对单个列(例如,第 75 列)求和,但不能将所有列加在一起:
awk -F ',' '{sum += } END {print sum}' file_name.csv
然后,我想在同一目录中创建一个新的 csv 文件,其中每一列都是前一个 csv 中该列的总和除以前一个 awk 命令生成的总和。所以换句话说,一个只有 1 行的 csv,其中每一列都有一个数字,即列 sum/total 总和。
非常感谢任何帮助!
如果所需的最终输出只是一个单行 CSV 文件,其中列总和除以输入中每一列的总和,那么这应该用一个 awk
命令完成.
{
for (i = 1; i <= NF; i++)
{
colsum[i] += $i
totsum += $i
if (NF > maxfld)
maxfld = NF
}
}
END {
pad = ""
for (i = 1; i <= maxfld; i++)
{
printf("%s%.2f", pad, colsum[i] / totsum)
pad = ","
}
print ""
}
我会将其存储在 script.awk
和 运行 等文件中:
awk -F, -f script.awk data
给定样本输入(8 行 8 列)— 一组 10 到 99 之间的随机数:
34,98,18,16,62,86,21,37
39,10,62,33,81,16,70,36
23,23,56,16,86,82,30,74
18,10,42,46,99,93,83,76
90,10,76,50,12,24,13,96
11,40,89,92,31,71,25,90
87,82,33,24,32,25,98,17
86,50,70,33,93,30,98,67
输出是:
0.12,0.10,0.13,0.09,0.15,0.13,0.13,0.15
显然,您可以调整用于显示最终值的格式;我选择了 2 位小数,但你可以选择任何你喜欢的格式。
题目问的是84x84的矩阵;此代码也适用于此类矩阵。矩阵不必是正方形的。输入数据甚至不必在每一行中具有相同数量的字段。您可以添加验证以坚持任一条件或两者。如果您需要中间结果文件,您也可以安排此代码生成它们。