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。