次のエントリを含むCSVファイルがあります。
"";"";"";"";"Park2";"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.";"PKT";"2";"100,0000";"-596,7500";"1";"0";"Lamella Koivu Natur Loc
- Ruotsalainen, laadukas
- 5G Lukkoponttiparketti, taitettava/painettava
- Helppo asentaa
- 3-sauvainen, mattalakattu
- Lauta 14x188x2266mm
- 3,41m2/pkt, 102,3m2/lava
29,33€/M2";""
私が必要とするものは次のように出力されます。
"";"";"";"";"Park2";"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.";"PKT";"2";"100,0000";"-596,7500";"1";"0";"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2";""
それとも機能するかもしれませんが、これはありません。 br手動で追加することをテストしましたが、うまくいきました。オンラインストアの商品説明を変更したいです。これでこれは行われず、インポート中に行の変更が削除されます(joomla cmsのインポートコンポーネント)。
シェルスクリプトの.txtファイルからcsvファイルを作成しています。
答え1
$ csvsql -H -d ';' --query "SELECT a,b,c,d,e,f,g,h,i,j,k,l,REPLACE(m, char(10), '<br>'||char(10)),n FROM data" data.csv
これは以下を使用します。csvkit
CSVファイルをデータベーステーブルとして扱い、すべての列(a
名前はto n
、合計14の匿名列)を選択します。char(10)
列13()のリテラル改行文字()を次の改行文字m
に置き換えます。<br>
結果:
,,,,Park2,"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.",PKT,2,1000000,-5967500,1,0,"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2",
;
出力に-delimiterを含めるには、結果を次に渡しますcsvformat
。
$ csvsql -H -d ';' --query "SELECT a,b,c,d,e,f,g,h,i,j,k,l,REPLACE(m, char(10), '<br>'||char(10)),n FROM data" data.csv | csvformat -D ';'
;;;;Park2;Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.;PKT;2;1000000;-5967500;1;0;"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2";
答え2
perl -0pe 's/("[^"]*")(?=[;\n])/ $1 =~ s!\n!<br>\n!gr /gse' ex.csv
perl -0pe
...入力を吸い込み、最終的に結果を印刷します。s/("[^"]*")(?=[;\n])/ action-perl /ge
...すべての文字列を次の結果に置き換えます。$1 =~ s!\n!<br>\n!gr
改行文字を次に置き換えます。<br>\n
答え3
gawk
どこで使うRS
(レコード区切り記号)は正規表現です。。
BEGIN {
RS="\"\n"
}
{
gsub("\n","<br>\n")
print
}
"
これは行末のaがレコードの終わりであると仮定しますが、パターンはフィールドの先頭の改行文字と一致することもあります。このような場合、<br>
そこには何も挿入されません。
他のバージョンではawk
この機能をサポートしていない可能性があります。 ~からawk
仕様:
RSに複数の文字が含まれている場合、結果は指定されません。
答え4
私はRubyとRubyモジュールが好きです。
ruby -e '
require "csv"
options = {:col_sep => ";", :force_quotes => true}
new_csv = CSV.generate(options) {|csv|
CSV.foreach(ARGV.shift, options) {|row|
row[-2].gsub!(/\n/, "<br>\n")
csv << row
}
}
puts new_csv
' file.csv