首页 > 解决方案 > 使用 Shell 脚本或 awk 以 CSV 文件的 columnName = columnValue 形式显示输出

问题描述

我有一个 CSV 文件,如下所示:

US,China,South Africa
1000,0,129

我正在寻找的输出:

Value of US = 1000
Value of China = 0
Value of South Africa = 129

我的 CSV 文件已被过滤为除了列标题行之外仅包含一行。上述语句对 csv 文件中的所有列重复。

一些附加信息:

首先,csv 文件中的列名和值用逗号分隔。该文件是这样生成的,我没有修改分隔符。

其次,我所有的列名都是字符串(之间可能包含空格),而我所有的值都是正数(整数)。

最后,我还交叉检查了我的csvfile,每一列都有对应的值(即没有空值)。

到目前为止,我已经尝试了以下方法:

csvcut -n filename.csv #To try and get the column names to iterate through them

但是,上面的命令会返回如下输出:

1: US
2: China
3: South Africa

另外,给定列名作为我的 shell 脚本的输入,我写了

echo "Value of $1 = `csvcut -c $1 filename.csv`"

当运行时sh my_script.sh US

我得到的输出是

Value of US = 1000

我只是不知道如何在所有列中执行此操作。

编辑

由于问题已关闭,因此在评论中找到了正确的解决方案。

归功于埃德莫顿。

对于其他面临此问题的人,解决方案如下:

awk -F, 'NR==1{split($0,h);next} {for (i=1;i<=NF;i++) print "Value of", h[i], "=", $i}' file

标签: bashshellawk

解决方案


awk -F, 'NR==1{split($0,h);next} {for (i=1;i<=NF;i++) print "Value of", h[i], "=", $i}' file

推荐阅读