다음과 같은 항목이 포함된 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