다음과 같은 CSV 파일이 있습니다.
a.csv
"1,2,3,4,9"
"1,2,3,6,24"
"1,2,6,8,28"
"1,2,4,6,30"
나는 다음과 같은 것을 원한다
b.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
나는 시도했지만 awk '{split($0,a,"\"");
도움이 되지 않았습니다. 도움을 주시면 감사하겠습니다.
답변1
가장 간단한 방법:
tr -d '"' <a.csv >b.csv
답변2
gsub()
전역 교체를 위한 함수 사용
$ awk '{gsub(/"/,"")};1' input.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
출력을 새 파일로 보내려면 >
쉘 연산자를 사용하십시오.
awk '{gsub(/"/,"")};1' input.csv > output.csv
배열로 분할하는 것도 가능합니다. 필수는 아니지만 다음과 같이 사용할 수 있습니다.
$ awk '{split($0,a,/"/); print a[2]}' input.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
1,2,3,4
이 특정 질문에서 일반적인 패턴은 따옴표가 줄의 시작과 끝에 있다는 것입니다. 즉, 필드 1은 null, 필드 2는 null , 필드 3은 필드 구분 기호로 생각할 수도 있습니다. 또한 null입니다. 그래서 우리는 이렇게 할 수 있습니다:
awk -F '"' '{print $2}' input.csv
전체 줄의 하위 문자열을 꺼낼 수도 있습니다.
awk '{print substr($0,2,length()-2)}' quoted.csv
첫 번째 문자와 마지막 문자를 제거하는 방법에 대해 말하면 다음과 같습니다.이것에 대한 stackoverflow의 전체 기사가 있습니다.sed
POSIX 쉘 과 같은 다른 도구와 함께 사용됩니다.
답변3
또 다른 해결책 sed
:
sed -e 's/"//g' a.csv > b.csv
답변4
이 명령을 사용할 수 있습니다
awk '{gsub("\"",RS);print}' a.csv > b.csv