LinuxQuestions.org
Review your favorite Linux distribution.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices


Reply
  Search this Thread
Old 11-21-2007, 04:20 AM   #1
khairilthegreat
LQ Newbie
 
Registered: Oct 2006
Distribution: Kubuntu
Posts: 25

Rep: Reputation: 15
Combine multiple one column text file into one text file with multiple colum


Hi All. I have multiple text file which contains a one column data. All the data look like this
Code:
1
0.5325
1
0
0
318
How to combine this multiple text file into one text file with multiple column using csv format. For example, for 2 text file:

File 1
Code:
1
0.495382
300
0
0
95400
File 2
Code:
1
0.624025
400
0
0
127200
How to combine this to text file into one file which look like this
Code:
0.495382,0.624025
300,400
0,0
0,0
95400,127200
Thank You.
 
Old 11-21-2007, 04:27 AM   #2
Fantasio
Member
 
Registered: Nov 2007
Location: Vinsobres - Drome - France
Distribution: SuSE Linux 11.3
Posts: 152

Rep: Reputation: 19
that's too easy

use the read syntax inside a while loop ...

See manpage and come back if more help needed
 
Old 11-21-2007, 06:46 AM   #3
khairilthegreat
LQ Newbie
 
Registered: Oct 2006
Distribution: Kubuntu
Posts: 25

Original Poster
Rep: Reputation: 15
Thanks for your reply Fantasio.

After googling for some time I finally found the simplest solution to my problem
Code:
# paste file1 file2 | sed 's/\t/,/g'
will do the trick.

I've try to use while loop and read command but my knowledge of shell script is not very good. Can you post the solution using while and read command. I'm curios to see how the solution work.

Thank you.
 
Old 11-22-2007, 03:55 PM   #4
Fantasio
Member
 
Registered: Nov 2007
Location: Vinsobres - Drome - France
Distribution: SuSE Linux 11.3
Posts: 152

Rep: Reputation: 19
In fact, I've forgotten that command.

don't know if it works (not tested)
while read lig1 <& /tmp/file1.txt ; read lig2 <& /tmp/file2.txt ; do echo $lig1 $lig2; done
 
Old 11-22-2007, 05:06 PM   #5
Fantasio
Member
 
Registered: Nov 2007
Location: Vinsobres - Drome - France
Distribution: SuSE Linux 11.3
Posts: 152

Rep: Reputation: 19
This script work using perl, the previous one contains some mistakes



open FILE1, "/tmp/file1.txt" or die "could not open file1.txt" ;
open FILE2, "/tmp/file2.txt" or die "could not open file2.txt" ;
open FILE3, "/tmp/file3.txt" or die "could not open file3.txt" ;

$file1 = <FILE1>; chomp $file1 ;
$file2 = <FILE2>; chomp $file2 ;
$file3 = <FILE3>; chomp $file3 ;
while ($file1 or $file2 or $file3) {
print "$file1 $file2 $file3 \n";
$file1 = <FILE1>; chomp $file1 ;
$file2 = <FILE2>; chomp $file2 ;
$file3 = <FILE3>; chomp $file3 ;
}
close FILE1 ;
close FILE2 ;
close FILE3 ;
 
Old 11-22-2007, 05:11 PM   #6
Fantasio
Member
 
Registered: Nov 2007
Location: Vinsobres - Drome - France
Distribution: SuSE Linux 11.3
Posts: 152

Rep: Reputation: 19
In fact, I've tried to parse file to the standar input but incorrectly, my mind wasn't clear enough

so, if you want read a file to the end with some treatments on it you can do that :
while read lig1 ; do echo $lig1 ; done </tmp/file1.txt
 
Old 11-23-2007, 05:07 AM   #7
Fantasio
Member
 
Registered: Nov 2007
Location: Vinsobres - Drome - France
Distribution: SuSE Linux 11.3
Posts: 152

Rep: Reputation: 19
I trapped myself by a too fast answer, but I'm able to give a solution, probably not the best, but this one works and was verified ...

#!/bin/bash

let nbline=0
let nbline2=0
let nbline3=0

while read ligne ; do t1[$nbline]=$ligne ; let nbline=$nbline+1 ; done < /tmp/file1.txt ;
while read ligne ; do t2[$nbline2]=$ligne ; let nbline2=$nbline2+1 ; done < /tmp/file2.txt ;
while read ligne ; do t3[$nbline3]=$ligne ; let nbline3=$nbline3+1 ; done < /tmp/file3.txt ;

if [ $nbline2 > $nbline ] ; then let nbline=$nbline2; fi
if [ $nbline3 > $nbline ] ; then let nbline=$nbline3; fi

for ((l=0;$l<$nbline;l=$l+1)) ; do echo ${t1[$l]} ${t2[$l]} ${t3[$l]} ; done
 
Old 11-23-2007, 01:31 PM   #8
khairilthegreat
LQ Newbie
 
Registered: Oct 2006
Distribution: Kubuntu
Posts: 25

Original Poster
Rep: Reputation: 15
thank you

Superb. Thank you for the solution.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
combine multiple files into one file? baddah Linux - Newbie 10 09-06-2011 11:22 AM
Find and replace text in multiple file Bad_Bob Linux - Software 9 05-08-2008 02:31 AM
Steps needed to convert multiple text files into one master text file jamtech Programming 5 10-07-2007 11:24 PM
ripping a column from a text file dominant Linux - Newbie 1 01-31-2006 04:15 AM
trying to search and replace text file for single & multiple line breaks separately brokenfeet Programming 7 08-29-2003 01:56 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 07:21 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration