sedを使用してスペースを削除し、日付タイムスタンプをスキップします。

sedを使用してスペースを削除し、日付タイムスタンプをスキップします。

s/\ //gCSVファイルからスペースを削除したいです。以下を使用"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

関連情報