![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | 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 here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Combining files horizontally | anshuljain | HP-UX | 3 | 03-14-2008 02:51 AM |
| Combining two files | hemangjani | Shell Programming and Scripting | 7 | 06-13-2007 07:32 PM |
| Combining Two Files | bat711 | Shell Programming and Scripting | 3 | 10-05-2005 10:26 AM |
| Combining files | Enda Martin | UNIX for Dummies Questions & Answers | 2 | 07-20-2001 07:31 AM |
| combining files | apalex | UNIX for Dummies Questions & Answers | 3 | 06-19-2001 06:49 AM |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Could someone help me reduce the number of runs for a shell program I created?
I have two text files below: Code:
$ more list1.txt 01 AAA 02 BBB 03 CCC 04 DDD $ more list2.txt 01 EEE 02 FFF 03 GGG I want to combine the lines with the same number to get the below: 01 AAA 01 EEE 02 BBB 02 FFF 03 CCC 03 GGG I made a shell which does this. The number of runs for this shell is the product of the number of lines in input1 and input2. I have a very large input and when I used this utility it took a long time to process and was wondering if there's another method to do this with less number of runs. Code:
$ more combine.ksh
#!/bin/ksh
while read number1 text1
do
while read number2 text2
do
[[ $number1 = $number2 ]] && echo "$number1 $text1 $number2 $text2"
done < $2
done < $1
Last edited by stevefox; 02-20-2006 at 12:30 AM. |
| Forum Sponsor | ||
|
|
|
#2
|
|||
|
|||
|
you can use simply paste file1 file2. This works fast also and hope it will resolve your problem.
Regards, Manish Jha. |
|
#3
|
|||
|
|||
|
see man pages for "paste" I guess it should work
|
|
#4
|
||||
|
||||
|
Here is a certain improvement to your script.
Code:
[[ $number1 = $number2 ]] && echo "$number1 $text1 $number2 $text2" && break; You might want to think of putting the elements of list2 in an array and then remove them dynamically (if it can be done..). All of these put together, I think you are better off with paste. Last edited by vino; 02-20-2006 at 01:06 AM. |
|
#5
|
|||
|
|||
|
Thanks guys!!
I was able to reduce it to one line below: Code:
paste $1 $2 | grep ".* .* .*" |
|||
| Google The UNIX and Linux Forums |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|