Merge CSV files and create a column with the filename from the original file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merge CSV files and create a column with the filename from the original file
# 1  
Old 05-09-2011
Question Merge CSV files and create a column with the filename from the original file

Hello everyone!!

I am not completely new to shell script but I havent been able to find the answer to my problem and I'm sure there are some smart brains here up for the challenge Smilie.

I have several CSV files that I need to combine into one, but I also need to know where each row came from. Let me give you an example.

Say I have file1.csv with the content:

Code:
1,a
2,b

And file2.csv:

Code:
3,c
4,d

I would like to have a file named result.csv, with the content:

Code:
1,a,file1.csv
2,b,file1.csv
3,c,file2.csv
4,d,file2.csv

The files I want to merge have different number of rows, but they all have the same number of columns, so I just need to create one new column in the result file. Any ideas??

Thank you beforehand.

/Fran

Last edited by joeyg; 05-09-2011 at 12:54 PM.. Reason: Please use CodeTags around scripts and file examples
# 2  
Old 05-09-2011
Something like this:
Code:
# ls file*csv
file1.csv  file2.csv

Code:
# awk '{print $0","FILENAME}' file*csv >  result.csv

This User Gave Thanks to Klashxx For This Post:
# 3  
Old 05-09-2011
Thank you Klashxx!!

That was a step in the right direction. Actually if I run the command with the example files as I posted in the example it works without any problems. I must have oversimplified my data because when I run it on the real thing the result file is huge, 2,3 GB although the source file are less than 100 Kb altogether. I tried to open with openoffice and in the preview window before importing I can see that there is a column with the file name which is great, then some stuff gets scrambled and repeated.

Here is a sample code of one file:

Code:
"Innography URL",Assignee,"Publication Number","Publication Country","Publication Date",Source,Title,Abstract,"Application Number",Citations,"Est. Expiration Date","Family ID","File Date","First Claim","All Claims",Inventors,"First IP Classification","All IPC Classifications","Kind Code","Priority Date","Normalized Assignee","Number of Claims","Number of Backward References","Number of Forward References","Original Assignee",Strength,"Ultimate Parent","US Classification"
"=Hyperlink(""https://app.innography.com/patents/14530190"",""Innography Link"")","Biora Ab",CA2226570,CA,1997-01-30,"CA Patents","Enamel matrix related polypeptide","The invention relates to novel nucleic acid fragments encoding polypeptides which are capable of mediating contact between enamel and cell surface. The invention also relates to expression vectors containing the nucleic acid fragments according to the invention for production of the protein organisms containing said expression vector methods for producing the polypeptide compositions comprising the polypeptides antibodies or antibody fragments recognizing the polypeptides and methods for treating various hard tissue diseases or disorders.",CA22265," ",2006-12-18,27221209,1996-06-26,,,"Wurtz, Tilmann  | Hammarstr, M Lars | Slaby, Ivan  | Cerny, Radim  | Fong, Cheng Dan",C12N01500900,"C12N 15/09|A61K 31/00|A61K 38/00|A61P 1/00|A61P 1/02|C07K 14/435|C07K 14/47|C07K 14/78|C12N 1/15|C12N 1/19|C12N 1/21|C12N 5/10|C12P 21/02",A1,1995-07-13,"Biora Ab",0,0,0,"BIORA AB","0th-10th Percentile",,435317100

As you can see one column contains an "abstract", the file may have all sort of special characters, could that have been the cause why it didnt work?

Thank you again for your help, really appreciated!
# 4  
Old 05-09-2011
Ok I figured out it is because the file contains commas inside quoted fields. And looking out there seems like a pain to use awk then. What about Perl, anyone know how to use it to solve the problem? Thanks!
# 5  
Old 05-10-2011
A Perl:
Code:
#!/usr/bin/perl
my $result_file=shift;
my $pattern=shift;
my (@file_list) = glob $pattern;

open( OUT, ">$result_file") or die "Can't open '$result_file':$!";
foreach my $in_file (@file_list) { 
   open(IN, "$in_file"); 
   while (<IN>) {
      chomp;
      print OUT $_ . ',' . $in_file . "\n" ;
      }
   close (IN);
   }

close (OUT);

Usage:
Code:
ex.pl result.txt 'file*csv'

This User Gave Thanks to Klashxx For This Post:
# 6  
Old 05-10-2011
Thank you again Klashxx!

That did not work either unfortunately, it also produces a huge text file. I noticed that there are also \n inside the fields and they were not rendered in the sample code I posted above, can this cause the problem?

You can download a sample of the file to see it yourself at www dot fransanchezoria.com/sample.csv

By the way hablas Español? Smilie

Thanks a million!

---------- Post updated at 09:32 AM ---------- Previous update was at 09:07 AM ----------

Just got the solution thanks to a program:

csvfix file_info *.csv > Result.csv
# 7  
Old 05-11-2011
Glad you solved it Fran, anyway Using the data you provided works fine for me.
Must be an env issue , what OS are you running ?

PD: i'm spanish but the use of english is mandatory.

Nos vemos ..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

I am trying to merge all csv files from source path into 1 file

I am trying to merge all csv files from source path into one single csv file in target. but getting error message: hadoop fs -cat /user/hive/warehouse/stage.db/PK_CLOUD_CHARGE/TCH-charge_*.csv > /user/hive/warehouse/stage.db/PK_CLOUD_CHARGE/final/TCH_pb_charge.csv getting error message:... (0 Replies)
Discussion started by: cplusplus1
0 Replies

2. UNIX for Dummies Questions & Answers

Merge two csv files using column name

Hi all, I have two separate csv files(comma delimited) file 1 and file 2. File 1 contains PAN,NAME,Salary AAAAA5467D,Raj,50000 AAFAC5467D,Ram,60000 BDCFA5677D,Kumar,90000 File 2 contains PAN,NAME,Dept,Salary ASDFG6756T,Karthik,ABC,450000 QWERT8765Y,JAX,CDR,780000... (5 Replies)
Discussion started by: Nivas
5 Replies

3. Shell Programming and Scripting

Compare 2 files of csv file and match column data and create a new csv file of them

Hi, I am newbie in shell script. I need your help to solve my problem. Firstly, I have 2 files of csv and i want to compare of the contents then the output will be written in a new csv file. File1: SourceFile,DateTimeOriginal /home/intannf/foto/IMG_0713.JPG,2015:02:17 11:14:07... (8 Replies)
Discussion started by: refrain
8 Replies

4. Shell Programming and Scripting

Merge different files into the original file

Hello Below is my requirement I have 3 files A1.txt , A2.txt and A3.txt . A2 is dynamically generating file I want the merge of A1,A2 and A3 in A2.txt Could you please help? (3 Replies)
Discussion started by: Pratik4891
3 Replies

5. UNIX for Dummies Questions & Answers

How to create a .csv file from 2 different .txt files?

Hi, I need to create a .csv file from information that i have in two different tab delimited .txt file. I just want to select some of the columns of each .txt file and paste them into a .cvs file. My files look like: File 1 transcript_id Seq. Description Seq. Length ... (2 Replies)
Discussion started by: alisrpp
2 Replies

6. Shell Programming and Scripting

create new column for filename

Hi, I created a list with 2 columns. Each line is from a different file. I am getting these with a loop in Perl. I would like to add a 3rd column with the name of the file that the line is coming from. I usually use pr to print the filename but this is not working here ... I was wondering if... (5 Replies)
Discussion started by: danieladna
5 Replies

7. Shell Programming and Scripting

How to create a CSV File by reading fields from separate files

SHELL SCRIPT Hi, I have 3 separate files within a folder. Every File contains data in a single column like File1 contains data mayank sushant dheeraj File2 contains DSA_AT MG_AT FLAT_09 File3 contains data 123123 232323 (2 Replies)
Discussion started by: mayanksargoch
2 Replies

8. Shell Programming and Scripting

Filename from splitting files to have the same filename of the original file with counter value

Hi all, I have a list of xml file. I need to split the files to a different files when see the <ko> tag. The list of filename are B20090908.1100-20090908.1200_CDMA=1,NO=2,SITE=3.xml B20090908.1200-20090908.1300_CDMA=1,NO=2,SITE=3.xml B20090908.1300-20090908.1400_CDMA=1,NO=2,SITE=3.xml ... (3 Replies)
Discussion started by: natalie23
3 Replies

9. Shell Programming and Scripting

Merging files to create CSV file

Hi, I have different files of the same type, as: Time: 100 snr: 88 perf: 10 other: 222 Each of these files are created periodically. What I need to do is to merge all of them into one but having the following form: (2 Replies)
Discussion started by: Ravendark
2 Replies

10. Shell Programming and Scripting

merge two two txt files into one file based on one column

Hi, I have file1.txt and file2.txt and would like to create file3.txt based on one column in UNIX Eg: file1.txt 17328756,0000786623.pdf,0000786623 20115537,0000793892.pdf,0000793892 file2.txt 12521_74_4.zip,0000786623.pdf 12521_15_5.zip,0000793892.pdf Desired Output ... (5 Replies)
Discussion started by: techmoris
5 Replies
Login or Register to Ask a Question