Bash 스크립트만 사용하여 CSV 필드에서 쉼표를 제거합니다.

Bash 스크립트만 사용하여 CSV 필드에서 쉼표를 제거합니다.

CSV 파일이 있고 ipAddress 열을 편집하여 쉼표를 제거하고 싶습니다. 기본적으로 120.30.19, 119.234.76다음과 같이 변경되어야 합니다. 120.30.19 119.234.76

내 데이터는 다음과 같습니다.

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19, 119.234.761,Value1,Value2

나는 그것이되기를 원합니다 :

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

내가 변경하고 싶은 유일한 것은 IP 주소입니다. 이 명령을 받았습니다: sed 's/\(\([^,]*,\)\{9\}[^,]*\),/\1/g'작동하는 data.csv이지만 IPAddress와 OtherColumn1을 병합하여 다음과 같은 결과를 얻습니다.

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddressOtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

나는 이것이 간단한 수정이라는 것을 알고 있지만 어떤 도움이라도 대단히 감사하겠습니다. 솔직히 sed 명령에 어떤 문제가 있고 왜 그렇게 하는지 잘 모르겠습니다. 쉘 스크립트나 정규식을 실행해야 하는 것은 이번이 처음이기 때문에 터미널에는 아직 부족한 점이 많습니다.

감사해요!

답변1

"CSV" 파일이 손상되었습니다. 쉼표 문자가 포함된 모든 필드를 큰따옴표로 생성하도록 수정해야 합니다. 그런 다음 Perl을 사용하십시오(예:텍스트::CSV) 또는 Python(예:데이터 세트) 또는밀러이를 사용하십시오. sed 및 awk는 간단한 쉼표로 구분된 파일에는 적합하지만 쉼표, 줄 바꿈 또는 기타 문제가 있는 문자가 포함된 인용 필드가 있는 실제 CSV 파일에는 적합하지 않습니다.

그러나 귀하의 IP 주소는 쉼표와 공백으로 구분된 것으로 보입니다. 항상 그런 경우(공백으로 시작하는 다른 필드가 없는 경우) sed 명령을 사용하여 해당 필드를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

sed -e 's/, / /g'

답변2

패턴 앞에 1 !이것을 추가하십시오.

sed '1 ! s/\(\([^,]*,\)\{9\}[^,]*\),/\1/g'

제목을 건너뛰겠습니다.

산출

$ sed '1 ! s/\(\([^,]*,\)\{9\}[^,]*\),/\1/g' d
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

답변3

awk를 사용하십시오.

$ awk 'BEGIN{FS=OFS=","} NF>12{$10=$10 $11; $11=$12; $12=$13; sub(/,[^,]*$/,"")} 1' file
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

또는 원하는 경우:

$ awk 'BEGIN{FS=OFS=","} {print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 (NF>12 ? $11 : ""), $(NF-1), $NF}' file
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

관련 정보