|
|||||||
| Forums | Search Forums | Register | Forum Rules | Man Pages | Albums | FAQ | Members | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Read in 2-column CSV, output many files based on field
Is there a way to read in a two-columned CSV file, and based on the fields in 1st column, output many different files? The input/output looks something like: Code:
input.csv: call Call Mom. call Call T-Mobile. go Go home. go Go to school. go Go to gas station. play Play music. play Play Beatles. Code:
outputs 3 files: call.xml <value><tokens><token>Call</token><token>Mom</token></tokens></value> <value><tokens><token>Call</token><token>T-Mobile</token></tokens></value> go.xml <value><tokens><token>Go</token><token>home</token></tokens></value> <value><tokens><token>Go</token><token>to</token><token>school</token></tokens></value> <value><tokens><token>Go</token><token>to</token><token>gas</token><token>station</token></tokens></value> play.xml <value><tokens><token>Play</token><token>music</token></tokens></value> <value><tokens><token>Play</token><token>Beatles</token></tokens></value> I'm stuck at the part of checking which items in 1st column are the same, then saving all those identical items along with their rows into a new list?? Is this possible to do with shell scripts, or would I need to use Python? |
| Sponsored Links | ||
|
|
#2
|
|||
|
|||
|
try: Code:
while read f l
do
printf "<value>" >> $f.xml
for w in ${l%[.]}
do
printf "<token>$w</token>" >> $f.xml
done
printf "</value>\n" >> $f.xml
done < input |
| The Following User Says Thank You to rdrtx1 For This Useful Post: | ||
pxalpine (12-05-2012) | ||
| Sponsored Links | ||
|
|
#3
|
||||
|
||||
|
Code:
sort input.csv | awk ' { print $1 } ' | uniq | while read file
do
awk -v FL=$file '$1==FL {
for (i=2;i<=NF;i++) {
if(i==NF) printf "%s", "<tokens>"$i"</tokens></value>\n";
if(i==2) printf "%s", "<value><tokens>"$i"</tokens>"
if(i!=NF && i!=2) printf "%s", "<tokens>"$i"</tokens>";
}
}' input.csv > $file.xml
done |
|
#4
|
|||
|
|||
|
What if you wanted to add a line at the beginning and end of file? Code:
call.xml <head><body> <value><tokens><token>Call</token><token>Mom</token></tokens></value> <value><tokens><token>Call</token><token>T-Mobile</token></tokens></value> </head></body> |
| Sponsored Links | |
|
|
#5
|
||||
|
||||
|
Code:
sort input.csv | awk ' { print $1 } ' | uniq | while read file
do
echo "<head><body>" > $file.xml
awk -v FL=$file '$1==FL {
for (i=2;i<=NF;i++) {
if(i==NF) printf "%s", "<tokens>"$i"</tokens></value>\n";
if(i==2) printf "%s", "<value><tokens>"$i"</tokens>"
if(i!=NF && i!=2) printf "%s", "<tokens>"$i"</tokens>";
}
}' input.csv >> $file.xml
echo "</body></head>" >> $file.xml
done |
| Sponsored Links | ||
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| awk read column csv and search in other csv | giankan | Shell Programming and Scripting | 8 | 07-02-2012 07:36 AM |
| Merging CSV fields based on a common field | landossa | Shell Programming and Scripting | 1 | 02-09-2012 12:02 AM |
| extract data in a csv file based on a certain field. | GroveTuckey | Shell Programming and Scripting | 9 | 11-02-2011 10:17 PM |
| How to split the data based on field from csv file? | somehanu | Shell Programming and Scripting | 8 | 03-31-2011 04:50 AM |
| Read CSV column value based on column name | JohnGG | Shell Programming and Scripting | 3 | 11-20-2009 12:33 AM |
|
|