5

I have a .CSV file with over 500,000 lines that I need to:

  1. find all 'space double quote space' sequences and replace with nothing
  2. find all 'space double quote' sequences and replace with nothing
  3. find all double quotes and replace with nothing

Example of .CSV line:

"DISH Hartford & New Haven  (Hartford)", "206", "FBNHD", " 06028", " East Windsor Hill", "CT", "Hartford County"

** Required output**

DISH Hartford & New Haven  (Hartford),206,FBNHD,06028,East Windsor Hill,CT,Hartford County

I need to remove all double quotes (") and spaces in front of and behind the commas (,).

I've tried

$ cd /Users/Leonna/Downloads/
$ cat bs-B2Bformat.csv | sed s/ " //g

This gives me the 'command incomplete' greater than prompt, so I then tried:

$ cat bs-B2Bformat.csv | sed s/ " //g
sed: 1: "s/": unterminated substitute pattern
$ cat bs-B2Bformat.csv |sed s/ \" //g
sed: 1: "s/": unterminated substitute pattern
$

There are too many lines for me to edit in Excel (Excel won't load all the lines) or even a text editor. How can I fix this?

4

5 に答える 5

1

これは私にとってはうまくいきます。これは、あなたの望むことですか ?

 sed -e 's|", "|,|g' -e 's|^"||g' -e 's|"$||g' file.csv

 echo '"DISH Hartford & New Haven (Hartford)", "206", "FBNHD", " 06028", " East Windsor Hill", "CT", "Hartford County"' | sed -e 's|", "|,|g' -e 's|^"||g' -e 's|"$||g'

 DISH Hartford & New Haven (Hartford),206,FBNHD, 06028, East Windsor Hill,CT,Hartford County
于 2013-09-17T02:25:01.080 に答える
0

1 つの方法は、とそのcsvモジュールを使用することです。

import csv 
import sys 

## Open file provided as argument.
with open(sys.argv[1], 'r') as f:

    ## Create the csv reader and writer. Avoid to quote fields in output.
    reader = csv.reader(f, skipinitialspace=True)
    writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONE, escapechar='\\')

    ## Read file line by line, remove leading and trailing white spaces and
    ## print.
    for row in reader:
        row = [field.strip() for field in row]
        writer.writerow(row)

次のように実行します。

python3 script.py csvfile

それは以下をもたらします:

DISH Hartford & New Haven  (Hartford),206,FBNHD,06028,East Windsor Hill,CT,Hartford County
于 2013-09-17T21:07:25.547 に答える
0

現在のすべての回答が見逃しているように見えるもの:

$ cat bs-B2Bformat.csv | sed s/ " //g
sed: 1: "s/": unterminated substitute pattern
$ cat bs-B2Bformat.csv |sed s/ \" //g
sed: 1: "s/": unterminated substitute pattern
$

上記の問題は、一重引用符がないことです。次のようになっているはずです。

$ cat bs-B2Bformat.csv | sed 's/ " //g'
                             ^        ^

一重引用符がないと、bash はスペースで分割し、3 つの個別の引数を送信します (少なくとも の場合 \")。sed は最初の引数をただのように見ていましたs/

編集:参考までに、一重引用符は必要ありません。このケースを簡単にするだけです。二重引用符を使用する場合は、一致させるために保持したいものをエスケープするだけです:

$ cat bs-B2Bformat.csv | sed "s/ \" //g"
于 2015-06-01T05:59:01.563 に答える