|
Home > Archive > Unix Shell > October 2006 > scripting help
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
|
|
| mainak.sen@gmail.com 2006-10-27, 1:17 pm |
|
Hi,
I have two files (file 1 has one column and file 2 four columns), I
have to choose the rows of file 2 where column 2 & 3 of file 2 matches
with column 1 of file 1. Anybody has any idea?
To add to this with an example,
file 1 :
1_8
1_9
1_10
1_11
file 2 :
1 1_500 1_600 0.000 1.0 0.0 0.0
1 1_500 1_500 0.000 0.0 0.0 1.0
1 1_9 1_100 0.000 0.50000 0.50000 0.00000
1 1_9 1_200 0.000 0.50000 0.50000 0.00000
1 1_9 1_400 0.000 1.0 0.0 0.0
.....
1 1_8 1_500 2.107 0.59766 0.40234 0.00000
1 1_8 1_9 2.107 0.89431 0.10569 0.00000
1 1_8 1_300 2.107 0.0 1.0 0.0
merge two files such that it will print
1 1_8 1_9 2.107 0.89431 0.10569 0.00000
i.e. the rows of file 2 where col.2 and col.3 matches with any two
entries in file 1
Any help would be extremely well appreciated.
Thanks
| |
| Dean G. 2006-10-27, 1:17 pm |
|
mainak.sen@gmail.com wrote:
> Hi,
> I have two files (file 1 has one column and file 2 four columns), I
> have to choose the rows of file 2 where column 2 & 3 of file 2 matches
> with column 1 of file 1. Anybody has any idea?
>
>
> To add to this with an example,
>
> file 1 :
> 1_8
> 1_9
> 1_10
> 1_11
>
>
> file 2 :
> 1 1_500 1_600 0.000 1.0 0.0 0.0
> 1 1_500 1_500 0.000 0.0 0.0 1.0
> 1 1_9 1_100 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_200 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_400 0.000 1.0 0.0 0.0
> ....
> 1 1_8 1_500 2.107 0.59766 0.40234 0.00000
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
> 1 1_8 1_300 2.107 0.0 1.0 0.0
>
>
> merge two files such that it will print
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
>
>
> i.e. the rows of file 2 where col.2 and col.3 matches with any two
> entries in file 1
>
> Any help would be extremely well appreciated.
> Thanks
Two questions:
1. If 1_8 is in both the second and third col, is that a match, or does
it need two different values from file 1?
2. Is everything space delimited ?
Dean G.
| |
| Ed Morton 2006-10-27, 1:17 pm |
| mainak.sen@gmail.com wrote:
> Hi,
> I have two files (file 1 has one column and file 2 four columns), I
> have to choose the rows of file 2 where column 2 & 3 of file 2 matches
> with column 1 of file 1. Anybody has any idea?
>
>
> To add to this with an example,
>
> file 1 :
> 1_8
> 1_9
> 1_10
> 1_11
>
>
> file 2 :
> 1 1_500 1_600 0.000 1.0 0.0 0.0
> 1 1_500 1_500 0.000 0.0 0.0 1.0
> 1 1_9 1_100 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_200 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_400 0.000 1.0 0.0 0.0
> ....
> 1 1_8 1_500 2.107 0.59766 0.40234 0.00000
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
> 1 1_8 1_300 2.107 0.0 1.0 0.0
>
>
> merge two files such that it will print
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
>
>
> i.e. the rows of file 2 where col.2 and col.3 matches with any two
> entries in file 1
>
> Any help would be extremely well appreciated.
> Thanks
>
awk 'NR==FNR{arr[$1];next}($2 in arr)&&($3 in arr)' file1 file2
What if col2 and col3 of file2 have the same value and only match with
one entry in file1?
Ed.
| |
| Janis Papanagnou 2006-10-27, 1:17 pm |
| mainak.sen@gmail.com wrote:
> Hi,
> I have two files (file 1 has one column and file 2 four columns), I
> have to choose the rows of file 2 where column 2 & 3 of file 2 matches
> with column 1 of file 1. Anybody has any idea?
>
>
> To add to this with an example,
>
> file 1 :
> 1_8
> 1_9
> 1_10
> 1_11
>
>
> file 2 :
> 1 1_500 1_600 0.000 1.0 0.0 0.0
> 1 1_500 1_500 0.000 0.0 0.0 1.0
> 1 1_9 1_100 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_200 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_400 0.000 1.0 0.0 0.0
> ....
> 1 1_8 1_500 2.107 0.59766 0.40234 0.00000
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
> 1 1_8 1_300 2.107 0.0 1.0 0.0
>
>
> merge two files such that it will print
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
>
>
> i.e. the rows of file 2 where col.2 and col.3 matches with any two
> entries in file 1
>
> Any help would be extremely well appreciated.
> Thanks
>
First read in data from file 1, then check whether the selected rows of
file 2 are in the stored data set.
awk 'NR==FNR {s[$1]} NR!=FNR && ($2 in s) && ($3 in s)' file1 file2
Janis
| |
| John W. Krahn 2006-10-27, 7:15 pm |
| mainak.sen@gmail.com wrote:
>
> I have two files (file 1 has one column and file 2 four columns), I
> have to choose the rows of file 2 where column 2 & 3 of file 2 matches
> with column 1 of file 1. Anybody has any idea?
>
>
> To add to this with an example,
>
> file 1 :
> 1_8
> 1_9
> 1_10
> 1_11
>
>
> file 2 :
> 1 1_500 1_600 0.000 1.0 0.0 0.0
> 1 1_500 1_500 0.000 0.0 0.0 1.0
> 1 1_9 1_100 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_200 0.000 0.50000 0.50000 0.00000
> 1 1_9 1_400 0.000 1.0 0.0 0.0
> ....
> 1 1_8 1_500 2.107 0.59766 0.40234 0.00000
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
> 1 1_8 1_300 2.107 0.0 1.0 0.0
>
>
> merge two files such that it will print
> 1 1_8 1_9 2.107 0.89431 0.10569 0.00000
perl -ane'BEGIN { @x{ grep [ chomp ], `cat file1` } = () }
exists $x{ $F[ 1 ] } && exists $x{ $F[ 2 ] } && print' file2
John
--
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order. -- Larry Wall
| |
| amrita.ray@gmail.com 2006-10-27, 7:15 pm |
| Yes, that's a match. Ideally the column 2&3 should have different
numbers, but even if it's same, I can write a one liner awk making them
different: awk '$2!=$3 {print $0}'...
Thanks.
Dean G. wrote:
> mainak.sen@gmail.com wrote:
>
> Two questions:
> 1. If 1_8 is in both the second and third col, is that a match, or does
> it need two different values from file 1?
>
> 2. Is everything space delimited ?
>
> Dean G.
| |
| amrita.ray@gmail.com 2006-10-27, 7:15 pm |
| and yes, everything space delimited.
Dean G. wrote:
> mainak.sen@gmail.com wrote:
>
> Two questions:
> 1. If 1_8 is in both the second and third col, is that a match, or does
> it need two different values from file 1?
>
> 2. Is everything space delimited ?
>
> Dean G.
| |
| amrita.ray@gmail.com 2006-10-27, 7:15 pm |
| Thanks a lot, it works!
Janis Papanagnou wrote:
> mainak.sen@gmail.com wrote:
>
> First read in data from file 1, then check whether the selected rows of
> file 2 are in the stored data set.
>
> awk 'NR==FNR {s[$1]} NR!=FNR && ($2 in s) && ($3 in s)' file1 file2
>
>
> Janis
| |
| amrita.ray@gmail.com 2006-10-27, 7:15 pm |
| Yes, it works. Thanks.
Ed Morton wrote:
> mainak.sen@gmail.com wrote:
>
> awk 'NR==FNR{arr[$1];next}($2 in arr)&&($3 in arr)' file1 file2
>
> What if col2 and col3 of file2 have the same value and only match with
> one entry in file1?
>
> Ed.
|
|
|
|
|