탭으로 구분된 데이터를 큰따옴표 필드 ""를 사용하여 구분된 레코드로 변환합니다.

탭으로 구분된 데이터를 큰따옴표 필드 ""를 사용하여 구분된 레코드로 변환합니다.

탭으로 구분된 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"

어디

  1. "149, Lower Stereet"은 "149 Lower"로 변환되고, "Stereet"은 "149 Lower, Stereet"로 변환되어야 합니다.
  2. 추가하다 "
  3. 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의 따옴표는 최종 결과에 이를 사용해야 하는 모든 파서에게 혼란을 줄 수 있습니다.

관련 정보