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番目の要素の場合、最初のカンマの前のすべての項目を削除します。
答え2
あなたの質問によると、画像はカンマ区切りの31列にあり、31列から最初の文字を削除する必要があります。
awk -F "," '{$31=substr($31,2);print $0}' file.csv
テストされ、うまく動作します。気になる点があれば教えてください。