인용된 CSV 파일에서 쉼표를 제거하는 방법은 무엇입니까?

인용된 CSV 파일에서 쉼표를 제거하는 방법은 무엇입니까?

내 입력은 다음과 같습니다

Name, Country, City
Jason, US, Memphis, "1,000"
David, US, Little Rock, "8,765,453"
"Karam, Sage", US, Nazareth, "4,678"
"David, simon", US, Chicago, "1,234"

나는 출력을 다음과 같이 원한다:

Name, Country, City
Jason, US, Memphis, "1000"
David, US, Little Rock, "8765453"
"Karam, Sage", US, Nazareth, "4678"
"David, simon", US, Chicago, "1234"

첫 번째 열이 아닌 네 번째 열에서만 쉼표를 제거하고 싶습니다.

답변1

아니면 펄을 사용하세요:

perl -pe 's/(\d),(\d)/$1$2/g' infile.txt

숫자(\d)로 둘러싸인 모든 쉼표를 제거합니다.

수천 개의 구분 기호를 제거하는 것이 작업의 핵심이라고 생각합니다. 쉼표가 있는 열이 아닙니다.

답변2

이를 수행하는 한 가지 방법은 네 번째 커밋이 마지막 커밋이라고 가정하는 것입니다.AWK

awk -F\" '{gsub(",","",$(NF-1))}1' OFS=\" infile.txt

출력은 다음과 같습니다

Name, Country, City
Jason, US, Memphis, "1000"
David, US, Little Rock, "8765453"
"Karam, Sage", US, Nazareth, "4678"
"David, simon", US, Chicago, "1234"

답변3

그리고 sed:

sed -e ':a' -e 's/,\([^"]*"$\)/\1/;ta' infile.txt

두 번째 큰따옴표 뒤에 제거할 쉼표가 있으면 반복할 수 있습니다.

답변4

CSV 데이터를 구문 분석하려면 CSV 파서를 사용하는 것이 좋습니다. Ruby에는 하나가 있습니다.

ruby -rcsv -e '
  data = CSV.read(ARGV.shift, :col_sep => ", ")
  out = CSV.new($stdout, :col_sep => ", ")
  data.each {|row| row[-1].delete! ","; out << row}
' file.csv
Name, Country, City
Jason, US, Memphis, 1000
David, US, "Little Rock", 8765453
"Karam, Sage", US, Nazareth, 4678
"David, simon", US, Chicago, 1234

관련 정보