CSV 파일의 일곱 번째 열에서 첫 번째 값과 후행 쉼표를 제거하는 방법

CSV 파일의 일곱 번째 열에서 첫 번째 값과 후행 쉼표를 제거하는 방법

csv 파일에서 31열의 첫 번째 값을 삭제하려고 합니다. 열은 아래와 같이 따옴표로 묶이고 쉼표로 구분됩니다.

"first_name","last_name","home_address"
"Frank",Russel","123 Hampton road"

31열은 이미지 열이며, 이미지는 쉼표로 구분됩니다.

"http://ddd.com/124dfr3f.jpg,http://ddd.com/hjasgx37trg.jpg"

첫 번째 이미지와 뒤따르는 쉼표는 31열에서 제거되어야 합니다.

다음에 추가- 여기에 예가 있습니다.

"one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","three","four","five","six","seven","eight","nine","ten","twenty-one","twenty-two","three","four","five","six","seven","eight","nine","ten","thirty-one","thirty-two","three","four","five","six","seven","eight","nine","forty"
"one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","three","four","five","six","seven","eight","nine","ten","twenty-one","twenty-two","three","four","five","six","seven","eight","nine","http://pictures.domain.com/e/josequervo/1183/eeeffcc7927sssssssssss5d26c0eb19e1dc53548x.jpg","http://pictures.domain.com/e/josequervo/0083/eeef8cc7927bf1245d26c0eb19e1dc53545x.jpg,http://pictures.domain.com/e/josequervo/0099/eeefscc7927bf1245d26c0eb19e1dc53546x.jpg,http://pictures.domain.com/e/josequervo/0012/eeefdcc7927bf1245d26c0eb19e1dc53547x.jpg,http://pictures.domain.com/e/josequervo/1183/eeeffcc7927bf1245d26c0eb19e1dc53548x.jpg,http://pictures.domain.com/e/josequervo/1234/eeefgcc7927bf1245d26c0eb19e1dc53549x.jpg,http://pictures.domain.com/e/josequervo/asee/eeefhcc7927bf1245d26c0eb19e1dc53540x.jpg,http://pictures.domain.com/e/josequervo/2341/eeefjcc7927bf1245d26c0eb19e1dc53544x.jpg","two",three","four","five","six","seven","eight","nine","forty"

이 URL과 쉼표를 제거해야 합니다.

http://pictures.domain.com/e/josequervo/0083/eeef8cc7927bf1245d26c0eb19e1dc53545x.jpg,

csv 파일의 처음 2행만 게시했지만 파일의 행이 300~400개이므로 이 이미지를 2행에서 마지막 행까지 제거해야 합니다. 첫 번째 줄은 변경할 수 없습니다.

답변1

GNU를 사용하면 sed다음과 같이 이 문제를 해결할 수 있습니다.

sed -e '
     s/","/&\n/30
     s/\n[^,]*,//
' file.csv

이는 다음과 같이 이해될 수 있습니다:

  • ","현재 줄에서 해당 문자열이 30번째로 나타나는 위치에 자리 표시자를 배치합니다.

  • 그런 다음 자리 표시자부터 첫 번째 쉼표까지 모든 것을 삭제합니다.

또 다른 방법은 다음과 같습니다.

 perl -F'/","/' -lane 'my $i;
      print join q[","], map { $i++ == 30 ? substr($_, 1+index($_, ",")) : $_ } @F;
 ' input-file.csv

방법:

  • Perl은 csv 파일을 한 줄씩 읽고 각 줄마다 문자열 주위로 분할 ","하고 분할된 요소를 @F 배열에 저장합니다.

  • 그런 다음 31번째 요소의 경우 첫 번째 쉼표 앞의 모든 항목을 삭제합니다.

답변2

귀하의 질문에 따르면 이미지는 쉼표로 구분된 31열에 있으며 31열에서 첫 번째 문자를 제거해야 합니다.

awk -F "," '{$31=substr($31,2);print $0}' file.csv

테스트를 거쳤으며 잘 작동합니다. 궁금한 점이 있으면 알려주세요.

관련 정보