如何解决我如何通过使用Bash在控制台上使用输入来计算特定csv列的总和
例如,如果您的csv文件带有一个名为“ Totalreported”的标头,则基本上为
。如果我在命令行“ Totalreported”中键入它,则应输出该特定列的所有值的总和。并且,例如,如果我有不同的csv,则应使用相同的过程。而且,如果我拼错了一个列名或该列名不存在,它将不会输出任何内容。 我怎样才能做到这一点?因此,脚本中没有硬编码的列名。
这是我尝试过的方法,但是这里是硬编码的值,但是我希望它不是硬编码的,以便可以使用任何csv文件。在这里,您可以看到硬编码的列名“已故”,“医院”和“ TotalReported”,但是我希望我的代码能够根据输入的内容从任何csv文件中获取任何列。如何实现此目标? / p>
#!/bin/bash
updatedata() {
if [ $pos -eq 0 ]
then
if [ "$1" = "Deceased" ]
then
v0=$(awk -F";" '{x+=$7}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv )
elif [ "$1" = "Hospital" ]
then
v0=$(awk -F";" '{x+=$6}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv)
elif [ "$1" = "TotalReported" ]
then
v0=$(awk -F";" '{x+=$5}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv)
fi
elif [ $pos -eq 1 ]
then
if [ "$1" = "Deceased" ]
then
v1=$(awk -F";" '{x+=$7}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv)
elif [ "$1" = "Hospital" ]
then
v1=$(awk -F";" '{x+=$6}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv)
elif [ "$1" = "TotalReported" ]
then
v1=$(awk -F";" '{x+=$5}END{print x}' ./COVID-19_aantallen_gemeente_cumulatief.csv)
fi
}
解决方法
一种简单的awk方法:
$ cat input
foo;bar;baz
1;2;3
4;5;6
7;8;9
$ ./sum.sh foo < input
12
$ ./sum.sh qux < input
$ ./sum.sh baz < input
18
$ cat sum.sh
#!/bin/sh
: ${FS=;}
col=${1:?}
awk 'NR==1 { for(i = 0; i <= NF; i++) if( $i == col ) c = i; next; }
c { sum += $c }
END{ if(c) print sum }
' col="$col" FS="$FS"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。