bash - 在 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)
并获得该特定列的所有数字的总和。最后三列很重要,因为您当然只能对它们求和。
解决方案
用于egrep -o
获取行首并计算分号:
echo 'TotalReported;Deceased;City' | egrep -o '.*Deceased' | sed -e 's/[^;]//g' | wc -c
输出是2
因为已故在第二列。
推荐阅读
- java - JavaFX - ReadOnlyProperty 不是只读的
- python - 为什么这个从输入中追加数字的列表理解不起作用?
- php - 我们的 Centos 服务器感染了一些恶意软件。它正在调用随机 IP/域。如何阻止服务器发出外部请求?
- javascript - 使用 laravel/php 循环一个 json
- hyperledger-fabric - 在 hyperledger 结构中使用非管理员卡和 composer-rest-server
- python - 设置对象在套接字模块中没有属性“编码”
- r - 在R中的数据框中旋转行和列
- mysql - 更新语句中的 MySQL 语法错误,NodeJS(MySQL2) 模块
- python - Python:如何在我的文件结果之后再打印一行?
- java - Firestore whereEqualTo、orderBy 和 limit(1) 不起作用