bash - 使用 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
解决方案
awk -F, 'NR==1{split($0,h);next} {for (i=1;i<=NF;i++) print "Value of", h[i], "=", $i}' file