내보낼 때 각 제목과 값에 큰따옴표가 있는 CSV가 있는데, 이를 사라지게 해야 하지만 실제로 값으로 존재할 수 있는 큰따옴표는 제거하지 않아야 합니다. 예를 들어:
"HEADER1","HEADER2","HEADER3","HEADER4","HEADER5"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"
다음을 사용하여 각 줄의 첫 번째 줄을 삭제할 수 있습니다.
$ sed -i.bak 's/^"//g' $1
다음과 같이 중간에 있는 모든 것을 제거할 수 있습니다.
$ sed -i.bak 's/","/,/g' $1
마침내 나는 "
각 줄의 마지막 부분을 삭제할 수 있다고 생각했습니다.
$ sed -i.bak 's/"$//g' $1
그러나 이것은 작동하지 않습니다. 한 줄로 전체 작업을 완료할 수 있나요?
고쳐 쓰다 나는 사용했다이 웹사이트숨겨진 문자 데이터를 붙여넣어 본 결과는 다음과 같습니다.
댓글 중 일부가 정확할 수도 있지만, 그렇다고 해서 여전히 변경이 필요하다는 뜻인지는 모르겠습니다. 반품이러한 인용문을 제거하기 전에 CSV에 이러한 인용문이 포함되어 있는지 확인할 수 있는 명확한 방법이 있습니까?어쩌면 첫 번째 문자를 따옴표로 한정할 수도 있을까요?
답변1
dos2unix
DOS 텍스트 파일 형식을 UNIX 텍스트 파일 형식으로 변환하는 데 사용됩니다.
dos2unix $1
3가지를 모두 다음과 같이 결합할 수 있습니다 sed
.
sed -i 's/^"//g;s/","/,/g;s/"$//g' $1
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
사용 AWK
:
awk -F ',' -v OFS=',' '{for (i=1;i<=NF;i++) sub(/^\"/,"",$i) sub (/\"$/,"",$i); print $0}' 1$
HEADER1,HEADER2,HEADER3,HEADER4,HEADER5
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
sub(/^\"/,"",$i)
"
각 필드의 시작 부분을 제거합니다 .sub(/\"$/,"",$i)
"
각 필드의 끝을 삭제합니다 .