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 ファイルには多くの行を含めることができます。すべてのオネライナーツールが役に立ちます。

答え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のコンテンツを含むパイプラインを起動します。最初の行をスキップして(末尾に1つは少ないようです。+2)、カンマを区切り文字として改行で区切られたチャンクにすべてレンダリングします(-F '、'、最初のものは$ 1、2番目は$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-exechttps://github.com/mslusarz/csv-nix-tools

関連情報