Convert CSV file to XML with sed
alphon5o
-
Anonymous user -
Anonymous user -
Bonjour,
I have a CSV file containing many radios in the following format:
I would like to import them into an XML file for Rhythmbox in this format:
Example:
Thank you in advance
Configuration: Linux / Firefox 5.0
I have a CSV file containing many radios in the following format:
radio_name;radio_stream_address;
I would like to import them into an XML file for Rhythmbox in this format:
<entry type="iradio"> <title>radio_name</title> <genre></genre> <artist></artist> <album></album> <location>radio_stream_address</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry>
Example:
myDesktop $ cat radio.csv nrj;http://player.nrj.fr/V4/nrj/nrj.asx; nrj_french;http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u; nrj_girl;http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u; nrj_rap;http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u; nrj_rnb;' target='_blank' rel='nofollow'>' target='_blank' rel='nofollow'>http://player.nrj.fr/V4/nrj/webradios/nrj_rnb.m3u;
myDesktop $ cat rb.xml <entry type="iradio"> <title>nrj</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/nrj.asx</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_french</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_girl</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> .... ....
Thank you in advance
Configuration: Linux / Firefox 5.0
3 answers
In my opinion, he hasn't done anything...
For the response (still!):
Base state:
First, change the delimiter of the file to replace the ; with spaces:
Next, we create a small shell script that will take care of everything:
We make the script executable with a small chmod:
Just run the script with our base file as an argument:
And observe the result:
Best regards,
Franzux.
Intel Q6600 Debian Lenny//Gentoo
Under Linux, 99% of bugs are located between the keyboard and the office chair...
For the response (still!):
Base state:
franzux@maerix:~/test$ cat radio.csv nrj;http://player.nrj.fr/V4/nrj/nrj.asx; nrj_french;http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u; nrj_girl;http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u; nrj_rap;http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u;
First, change the delimiter of the file to replace the ; with spaces:
franzux@maerix:~/test$ sed -i 's/;/ /g' radio.csv franzux@maerix:~/test$ cat radio.csv nrj http://player.nrj.fr/V4/nrj/nrj.asx nrj_french http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u nrj_girl http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u nrj_rap http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u
Next, we create a small shell script that will take care of everything:
#!/bin/bash # csv2xml.sh : Transforming csv file to xml file for integration # into Rhythmbox filename=$1 while read line; do nom='echo ${line} | awk {'print $1'}' adresse='echo ${line} | awk {'print $2'}' echo -e "<entry type=\"iradio\">\n\t<title>$nom</title>\n\t<artist></artist>\n\t<album></album>\n\t<location>$adresse</location>\n\t<play-count></play-count>\n\t<last-played></last-played>\n\t<bitrate></bitrate>\n\t<date></date>\n\t<mimetype>application/octet-stream</mimetype>\n</entry>" done < $filename > rb.xml We make the script executable with a small chmod:
franzux@maerix:~test$chmod +x csv2xml.sh
Just run the script with our base file as an argument:
franzux@maerix:~/test$ ./csv2xml.sh radio.csv
And observe the result:
franzux@maerix:~/test$ cat rb.xml <entry type="iradio"> <title>nrj</title> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/nrj.asx</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_french</title> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_girl</title> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_rap</title> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry>
Best regards,
Franzux.
Intel Q6600 Debian Lenny//Gentoo
Under Linux, 99% of bugs are located between the keyboard and the office chair...
Personally, I would lean more towards a template file...
--
Zen my nuggets ;-)
Do something for the environment, close your windows and adopt a penguin.
$ cat template.txt <entry type="iradio"> <title>NAME</title> <genre></genre> <artist></artist> <album></album> <location>http://URL</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> $ cat radio.csv nrj;http://player.nrj.fr/V4/nrj/nrj.asx; nrj_french;http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u; nrj_girl;http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u; nrj_rap;http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u; nrj_rnb;' target='_blank' rel='nofollow'>' target='_blank' rel='nofollow'>http://player.nrj.fr/V4/nrj/webradios/nrj_rnb.m3u; $ cat foo.sh #! /bin/bash while read line do NAME="${line%;*}" URL="${line#*://}" sed "s#NAME#${NAME}#;s#URL#${URL}#" template.txt done < <(sed 's/;$//' radio.csv) $ ./foo.sh <entry type="iradio"> <title>nrj</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/nrj.asx</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_french</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_french.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_girl</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_girl.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_rap</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_rap.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> <entry type="iradio"> <title>nrj_rnb</title> <genre></genre> <artist></artist> <album></album> <location>http://player.nrj.fr/V4/nrj/webradios/nrj_rnb.m3u</location> <play-count></play-count> <last-played></last-played> <bitrate></bitrate> <date></date> <mimetype>application/octet-stream</mimetype> </entry> $ --
Zen my nuggets ;-)
Do something for the environment, close your windows and adopt a penguin.