因此,我在结构相同的目录中具有多个.csv文件,第一行作为标题,第一列作为标签。说文件1如下:
name,value1,value2,value3,value4,......
name1,100,200,0,0,...
name2,101,201,0,0,...
name3,102,202,0,0,...
name4,103,203,0,0,...
....
文件2:
name,value1,value2,value3,value4,......
name1,1000,2000,0,0,...
name2,1001,2001,0,0,...
name3,1002,2002,0,0,...
name4,1003,2003,0,0,...
....
所有.csv文件具有相同的结构,具有相同的行数和列数。
我想要的是这样的东西:
name,value1,value2,value3,value4,......
name1,1100,2200,0,0,...
name2,1102,2202,0,0,...
name3,1104,2204,0,0,...
name4,1103,2206,0,0,...
....
最后一个文件中的所有值列将是所有.csv文件中的那些列中对应值的总和。因此,在结果文件的value1下,我应该具有1000 + 100 + ... + ...,依此类推。
.csv文件的数量不是固定的,所以我认为我需要一个循环。
如何在Linux计算机上使用bash脚本实现此目的。 谢谢!
答案 0 :(得分:0)
使用AWK
,尝试类似的操作:
awk '
BEGIN {FS=OFS=","}
FNR==1 {header=$0} # header line
FNR>1 {
sum[FNR,1] = $1 # name column
for (j=2; j<=NF; j++) {
sum[FNR,j] += $j
}
}
END {
print header
for (i=2; i<=FNR; i++) {
for (j=1; j<=NF; j++) {
$j = sum[i,j]
}
print
}
}' *.csv
sum
中。END
块中每一行和每一列的金额。希望这会有所帮助。
编辑
要计算平均值而不是总和,请尝试:
awk '
BEGIN {FS=OFS=","}
FNR==1 {header=$0} # header line
FNR>1 {
sum[FNR,1] = $1 # names column
for (j=2; j<=NF; j++) {
sum[FNR,j] += $j
}
}
END {
print header
files = ARGC - 1 # number of csv files
for (i=2; i<=FNR; i++) {
$1 = sum[i,1] # another treatment for the 1st column
for (j=2; j<=NF; j++) {
$j = sum[i,j] / files
# if you want to specify the number of decimal places,
# try something like:
# $j = sprintf("%.2f", sum[i,j] / files)
}
print
}
}' *.csv
答案 1 :(得分:0)
使用Perl
date_time level
0 2018-11-12 00:11:54 261.0564
1 2018-11-12 00:42:03 262.8177
2 2018-11-12 01:12:13 263.9395
3 2018-11-12 01:42:23 264.9376
4 2018-11-12 02:12:32 267.2714
5 2018-11-12 02:42:42 268.3845
6 2018-11-12 03:12:52 269.3476
7 2018-11-12 03:43:02 270.1414
8 2018-11-12 04:13:12 270.9120
9 2018-11-12 04:43:22 271.6264
10 2018-11-12 05:13:32 272.4339
11 2018-11-12 05:43:42 273.3226
12 2018-11-12 06:13:51 274.1788
13 2018-11-12 06:44:01 274.9057
14 2018-11-12 07:14:10 275.6401
15 2018-11-12 07:44:20 276.3888
16 2018-11-12 08:14:29 277.1319
17 2018-11-12 08:44:40 277.8713
18 2018-11-12 09:14:49 278.6563
19 2018-11-12 09:44:59 279.5125
20 2018-11-12 10:15:09 280.5232
21 2018-11-12 10:45:19 281.6038
22 2018-11-12 11:15:29 282.5887
23 2018-11-12 11:45:39 283.5268
24 2018-11-12 12:15:49 284.4925
25 2018-11-12 12:45:59 285.5137
26 2018-11-12 13:16:09 286.5162
27 2018-11-12 13:46:19 287.5524
28 2018-11-12 14:16:28 288.5737
29 2018-11-12 14:46:38 289.6199
30 2018-11-12 15:16:48 290.6105
31 2018-11-12 15:46:58 291.5811
32 2018-11-12 16:17:07 292.5799
33 2018-11-12 16:47:17 295.1786
34 2018-11-12 17:17:29 296.1767
35 2018-11-12 17:47:39 297.1735
36 2018-11-12 18:17:49 298.1223
37 2018-11-12 18:47:59 298.9085
38 2018-11-12 19:18:10 299.9747
39 2018-11-12 19:48:19 300.8697
40 2018-11-12 20:18:29 301.7941
41 2018-11-12 20:48:38 302.7222
42 2018-11-12 21:18:48 303.6684
43 2018-11-12 21:48:58 304.6440
44 2018-11-12 22:19:07 305.6458
45 2018-11-12 22:49:17 306.6508
46 2018-11-12 23:19:26 307.7308
47 2018-11-12 23:49:36 308.7820