如何通过读取CSV文件在新行中打印columnName=Value?

如何通过读取CSV文件在新行中打印columnName=Value?

Foo.csv我有一个包含以下数据的CSV 文件:

Name,Age,Education,Address
Alex,22,Computer Science, TX
Ron,24,Computer Science, AU

我期待以下输出:

Name=Alex
Age=22
Education=Computer Science
Address=TX

Name=Ron
Age=24
Education=Computer Science
Address=AU

CSV 文件可以包含许多行。任何 oneliner 工具都会有所帮助。

答案1

假设TX和之前的空格字符AU是拼写错误:

$ awk -F',' 'FNR==1{split($0, a); next}{for (i=1;i<=NF;i++)print a[i] "=" $i; print ""}' Foo.csv
Name=Alex
Age=22
Education=Computer Science
Address= TX

Name=Ron
Age=24
Education=Computer Science
Address= AU

这将在每个块之后打印一个换行符。

答案2

$ awk -F' *, *' -v OFS='\n' -v ORS='\n\n' '
    NR==1{split($0,h); next} {for (i=1;i<=NF;i++) $i=h[i]"="$i}
1' file
Name=Alex
Age=22
Education=Computer Science
Address=TX

Name=Ron
Age=24
Education=Computer Science
Address=AU

答案3

如果它始终是相同的列顺序并且始终是第一行,保存列:

<Foo.csv tail -n '+2' | awk -F',' '{print "Name="$1"\nAge="$2"\n"}'

启动一个包含 Foo.csv 内容的管道。跳过第一行(尾部似乎少了一个,因此 +2)并以逗号作为分隔符(-F',',第一个是 $1,第二个 $2)在由换行符分割的块中渲染所有其他行。填写缺失的字段。请注意 awk 命令块周围的单引号和其中静态文本的双引号。

答案4

$ cat print.sh 
#!/bin/sh

echo "Name=$1\nAge=$2\nEducation=$3\nAddress=$4\n"
$ cat Foo.csv | csv-exec -- ./print.sh %Name %Age %Education %Address

csv-exec 来自https://github.com/mslusarz/csv-nix-tools

相关内容