从CSV文件中获取条件和

Wok*_*Wok 14 csv awk

我有一个CSV文件,我想从中提取一些信息:对于一个列中的每个不同值,我想计算另一列中相应值的总和.最终,我可以用Python做,但我相信可以使用简单的解决方案awk.

这可能是CSV文件:

2    1:2010-1-bla:bla    1.6
2    2:2010-1-bla:bla   1.1
2    2:2010-1-bla:bla    3.4
2    3:2010-1-bla:bla    -1.3
2    3:2010-1-bla:bla    6.0
2    3:2010-1-bla:bla    1.1
2    4:2010-1-bla:bla    -1.0
2    5:2010-1-bla:bla    10.9
Run Code Online (Sandbox Code Playgroud)

我想得到:

1    1.6
2    4.5
3    5.8
4    -1.0
5    10.9
Run Code Online (Sandbox Code Playgroud)

现在,我只能提取:

a)第一列的值:

awk -F ' ' '{print $(2)}' MyFile.csv | awk -F ':' '{print $(1)}'
Run Code Online (Sandbox Code Playgroud)

然后得到:

1
2
2
3
3
3
4
5
Run Code Online (Sandbox Code Playgroud)

b)和值相等,例如,1.1在最后一栏中:

awk -F ' ' '{print $(NF)}' MyFile.csv | awk '$1 == 1.1'

然后得到:

1.1
1.1
Run Code Online (Sandbox Code Playgroud)

我无法同时提取我感兴趣的列,这可能最终帮助我.这是一个示例输出,可以简化总和的计算(我不知道):

1    1.6
2    1.1
2    3.4
3    -1.3
3    6.0
3    1.1
4    -1.0
5    10.9
Run Code Online (Sandbox Code Playgroud)

编辑:感谢Elenaher,我们可以说输入是上面的文件.

gho*_*g74 12

$ awk -F"[: \t]+" '{a[$2]+=$NF}END{for(i in a ) print i,a[i] }' file
4 -1
5 10.9
1 1.6
2 4.5
3 5.8
Run Code Online (Sandbox Code Playgroud)

  • +1绝对是最优雅的``[:\ t] +`! (3认同)