탭으로 구분된 CSV를 ""로 변환하고 값이 비어 있으면 공백을 추가하고 싶습니다.
FirstName LastName Address1 Address2 City State ZIP
John1 Mark 149 Lower Stereet California CA 05478
John2 Mark 149 Lower, Stereet California CA 05478
John3 Mark 149 ,Lower Stereet California CA 05478
원하는 결과로
"FirstName","LastName","Address1","Address2","City","State","ZIP"
"John1","Mark","149 Lower Stereet", ,"California","CA","05478"
"John2","Mark", ,"149 Lower, Stereet","California","CA","05478"
"John3","Mark","149,Lower Stereet", , "California","CA","05478"
다음 명령을 사용해 보았습니다.
sed 's/\t\+/,/g;s/^\|$/"/g;s/,/"&"/g' Actual.csv > Actual_V6.csv
산출
"FirstName","LastName","Address1","Address2","City","State","ZIP
"
"John1","Mark1","149 Lower Stereet","California","CA","05489
"
"John2","Mark","149 Lower"," Stereet","California","CA","05489","
"
"John3","Mark","149 ","Lower Stereet","California","CA","05489"
어디
- "149, Lower Stereet"은 "149 Lower"로 변환되고, "Stereet"은 "149 Lower, Stereet"로 변환되어야 합니다.
- 추가하다 "
- Null 값을 인식하지 못합니다.
편집하다
출력 hexdump
:
답변1
다음을 사용할 수 있습니다.
sed 's/\t/","/g; s/.*/"&"/; s/""/ /g' file
s/""/ /g
적절한 csv가 꼭 필요한 것은 아니지만 원하는 출력을 얻으려면 필요합니다.
당신이 가지고 있다면 csvtool
:
csvtool -t TAB -u ',' cat file
필요한 경우에만 필드를 참조합니다.
답변2
비교할 곳이 없어 테스트할 수 없지만 간단한 것은 어떻습니까?
Sed -r ‘s/^/“/;s/$/“/;s/\t/“,”/g;s/“”/ /g’
?
하지만 나는 이 질문이 틀렸다고 생각한다. 원본 TSV의 따옴표는 최종 결과에 이를 사용해야 하는 모든 파서에게 혼란을 줄 수 있습니다.