내 입력은 다음과 같습니다
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