s/\ //g
CSVファイルからスペースを削除したいです。以下を使用"06-JAN-15 13:20:00"
できます。"06-JAN-1513:20:00"
1つの解決策は、すべてのスペースを削除してから日付を見つけて、06-JAN-15
その後にスペースを追加することです。これを行う方法がわかりません。
サンプルCSVファイル:(1行のみ)
294335,"17-APR-15 00:00:00 ",6258,"C"," <-----huge blank space--->,"07-JAN-15 00:00:00"
huge blank space
空でない場合は、XMLメッセージが含まれます。
答え1
(?<!...)
sedではありませんが、Perlreで否定的なLookBehindアサーションを使用するソリューションがあります。
perl -pe 's/(?<!\d\d-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d\d) //g'
答え2
使用ミラー( mlr
) データのスペースをクリーンアップするには、次のようにします。
$ cat file
294335,"17-APR-15 00:00:00 ",6258,"C"," ","07-JAN-15 00:00:00"
$ mlr --csv -N clean-whitespace file
294335,17-APR-15 00:00:00,6258,C,,07-JAN-15 00:00:00
$ mlr --csv -N --quote-all clean-whitespace file
"294335","17-APR-15 00:00:00","6258","C","","07-JAN-15 00:00:00"
mlr
特に指定しない限り、不要な引用符を削除してください--quote-all
。みんなフィールド)。この-N
オプションを使用すると、Miller は最初の行をヘッダーではなくデータレコードとして読み込みます。
答え3
使用awk
:
< input awk 'BEGIN {FS=OFS=","} {gsub(" ", "", $1); gsub(" ", "", $3); gsub(" ", "", $4); gsub(" ", "", $5); print}'
これにより、各レコードのコンマで区切られた最初、3番目、4番目、5番目のフィールドから空白文字が削除される効果があります。
答え4
実際、このファイルをCSVファイルに解析し、余分なスペースを削除できます。
ruby -rcsv -ne '
row = CSV::parse_line($_)
puts CSV::generate_line(row.map {|field| field.strip})
' file
294335,17-APR-15 00:00:00,6258,C,"",07-JAN-15 00:00:00