CSVファイルの7番目の列から最初の値と末尾のコンマを削除する方法

CSVファイルの7番目の列から最初の値と末尾のコンマを削除する方法

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ファイルを1行ずつ読み取り、各行ごとに文字列の周りに分割し、分割され ","た要素を@ F配列に格納します。

  • 次に、31番目の要素の場合、最初のカンマの前のすべての項目を削除します。

おすすめ記事