このようなCSVファイルを持っている:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
次のような結果を探します:
HEADER
first, column|second "some random quotes" column|third ol' column
言い換えると、「FOOTER」を削除すると、開始、終了、および前後に引用符が付きます。
これまでのところ、このコードは動作します:
sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe
あなたが問題を見るように、それは4つの余分なファイルを作成します。
余分なファイルを作成せず、1つのスクリプトで同じことを行うことを目標とする別のソリューションがあります。それはあまりうまくいきません。
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
単純化されたcsvでのみ、あなたはそれで動作しません。実際のCSVファイル(Python / Perl / Ruby)を処理できるライブラリでプログラミング言語を使用します。