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