首页 > 解决方案 > 在 csv 文件中查找列的索引号,但命令不显示结果?

问题描述

我想根据列名获取 CSV 列的索引号。例如,我有这些列:TotalReported;Deceased;City 我尝试这样做:

head -n1 data.csv | tr ";" "\n" | grep -nx "Deceased" | cut -d";" -f1

但没有打印任何内容。我也试过这样做:

awk -F, '{ for(i=1; i<=NF; i++) if($i=="Deceased") {print i} exit}' data.csv'

不打印任何东西。我能做些什么?

这是data.csv文件的内容:

Date_of_report;Municipality_code;Municipality_name;Province;Total_reported;Hospital_admission;Deceased
2020-03-13 10:00:00;GM0003;Appingedam;Groningen;0;0;0
2020-03-13 10:00:00;GM0010;Delfzijl;Groningen;0;0;0
2020-03-13 10:00:00;GM0014;Groningen;Groningen;3;0;0
2020-03-13 10:00:00;GM0024;Loppersum;Groningen;0;0;0
2020-03-13 10:00:00;GM0034;Almere;Flevoland;1;1;0
2020-03-13 10:00:00;GM0037;Stadskanaal;Groningen;0;0;0
2020-03-13 10:00:00;GM0047;Veendam;Groningen;0;0;0
2020-03-13 10:00:00;GM0050;Zeewolde;Flevoland;1;0;0
2020-03-13 10:00:00;GM0059;Achtkarspelen;Friesland;0;0;0
2020-03-13 10:00:00;GM0060;Ameland;Friesland;0;0;0
2020-03-13 10:00:00;GM0072;Harlingen;Friesland;0;0;0
2020-03-13 10:00:00;GM0074;Heerenveen;Friesland;0;0;0

基本上我想得到一列的索引号,然后把索引号放在这个awk命令中

v1=$(awk -F";" '{x+=$index}END{print x}' ./data.csv)

并获得该特定列的所有数字的总和。最后三列很重要,因为您当然只能对它们求和。

标签: bashshellcsvindexingawk

解决方案


用于egrep -o获取行首并计算分号:

echo 'TotalReported;Deceased;City' | egrep -o '.*Deceased' | sed -e 's/[^;]//g' | wc -c

输出是2因为已故在第二列。


推荐阅读