Merging rows using two common rows.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merging rows using two common rows.
# 1  
Old 10-22-2012
Merging rows using two common rows.

Hi..

My requirement is simple but unable to get that..

File 1 :
 
3 415 A G
4 421 G .
39 421 G A
2 421 G A,C
41 427 A .
4 427 A C
42 436 G .
3 436 G C
43 445 C .
2 445 C T
41 447 A .

Output

3415AG
4,39,2421G.;A;A,C
41,4427A.;C
42,3436G.;C
43,2445C.;T
41447A.

the common columns/keys are 2 and 3 and based on them, i need to merge column 1 and column 4

i used this awk code to combine

Code:
awk '{ x[$1]=x[$1] " " $3;}
END {
   for (k in x) print k,x[k] >"OUTPUT1";
}' File

Above one is for checking using one common column and merging one column, but i have two here.. any suggestions for modifications? the other thing i am unable to achieve is to keep commas/semicolons while merging column 1 and 4..
# 2  
Old 10-22-2012
Code:
awk '{a[$2,$3]=a[$2,$3]?$1","a[$2,$3]";"$4:$0}END{for(i in a){print a[i]}}' file

This User Gave Thanks to pamu For This Post:
# 3  
Old 10-22-2012
awk -f em.awk myFile
em.awk:
Code:
BEGIN {
  c=","
  sc=";"
}
{
  idx=($2 OFS $3)
  o[idx]=(idx in o)?o[idx] c $1:$1
  f[idx]=(idx in f)?f[idx] sc $4:$4
}
END {
  for (i in o)
    print o[i], i, f[i]
}

This User Gave Thanks to vgersh99 For This Post:
# 4  
Old 10-22-2012
Code:
 perl -alne '{$h{"$F[1] $F[2]"}[0].=",$F[0]";$h{"$F[1] $F[2]"}[1].="$F[3];";}
END { foreach $item (sort keys %h ) {
$Tget="$h{$item}[0] $item $h{$item}[1]";$Tget=~s/(^,|;$)//g;print "$Tget"; }}' input_file

This User Gave Thanks to msabhi For This Post:
# 5  
Old 10-22-2012
thank you all, Its simple and elegant solutions. All solutions are working great !!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Merging rows based on same ID in First column.

Hellow, I have a tab-delimited file with 3 columns : BINPACKER.13259.1.p2 SSF48239 BINPACKER.13259.1.p2 PF13243 BINPACKER.13259.1.p2 G3DSA:1.50.10.20 BINPACKER.13259.2.p2 SSF48239 BINPACKER.13259.2.p2 PF13243 BINPACKER.13259.2.p2 G3DSA:1.50.10.20... (7 Replies)
Discussion started by: anjaliANJALI
7 Replies

2. Shell Programming and Scripting

Merge files based on both common and uncommon rows

Hi, I have two files A (2190 rows) and file B (1100 rows). I want to merge the contents of two files based on common field, also I need the unmatched rows from file A file A: ABC XYZ PQR file B: >LMN|chr1:11000-12456: >ABC|chr15:176578-187678: >PQR|chr3:14567-15866: output... (3 Replies)
Discussion started by: Diya123
3 Replies

3. Shell Programming and Scripting

Merging rows after matching a pattern

Hi All, I have the below file where I want the lines to merged based on a pattern. AFTER CMMILAOJ CMMILAAJ AFTER CMDROPEJ CMMIMVIJ CMMIRNTJ CMMIRNRJ CMMIRNWJ CMMIRNAJ CMMIRNDJ AFTER CMMIRNTJ CMMIRNRJ CMMIRNWJ (4 Replies)
Discussion started by: varun22486
4 Replies

4. Shell Programming and Scripting

Merging rows in awk

Hello, I have a data format as follows: Ind1 0 1 2 Ind1 0 2 1 Ind2 1 1 0 Ind2 2 2 0 I want to use AWK to have this output: Ind1 00 12 21 Ind2 12 12 00 That is to merge each two rows with the same row names. Thank you very much in advance for your help. (8 Replies)
Discussion started by: Homa
8 Replies

5. UNIX Desktop Questions & Answers

merging files and add missing rows

hello all, I have files that have a specific way for naming the first column they are make of five names in Pattern of 3 Y = (no case sensitive) so the files are names $Y-$Y-$Y or $X-$Y-$Z depending how we look they only exist of the pattern exist now I want to create a file from them that... (9 Replies)
Discussion started by: A-V
9 Replies

6. UNIX for Dummies Questions & Answers

merging rows into new file based on rows and first column

I have 2 files, file01= 7 columns, row unknown (but few) file02= 7 columns, row unknown (but many) now I want to create an output with the first field that is shared in both of them and then subtract the results from the rest of the fields and print there e.g. file 01 James|0|50|25|10|50|30... (1 Reply)
Discussion started by: A-V
1 Replies

7. Shell Programming and Scripting

Merging rows with same column 1 value

I have the following space-delimited input: 1 11.785710 117.857100 1 15 150 1 20 200 1 25 250 3 2.142855 21.428550 3 25 250 22 1.071435 10.714350 The first field is the ID number, the second field is the percentage of the total points that the person has and the third column is the number... (3 Replies)
Discussion started by: mdlloyd7
3 Replies

8. UNIX for Dummies Questions & Answers

Merge rows with common column

Dear all I have big file with two columns A_AA960715 GO:0006952 A_AA960715 GO:0008152 A_AA960715 GO:0016491 A_AA960715 GO:0007165 A_AA960715 GO:0005618 A_AA960716 GO:0006952 A_AA960716 GO:0005618 A_AA960716... (15 Replies)
Discussion started by: AAWT
15 Replies

9. Shell Programming and Scripting

Merging of rows

Hi guys, Wish you all a very Happy New Year!!!. Thanks in advance. I want to read a file and merge the rows which have '\n' in it. The rows could be > 50,000 bytes. The script should merge all the rows till the next row starts with word 'Type|'. ex.... (24 Replies)
Discussion started by: ssachins
24 Replies

10. Shell Programming and Scripting

merge rows based on a common column

Hi guys, Please guide me if you have a solution to this problem. I have tried paste -s but it's not giving the desired output. I have a file with the following content- A123 box1 B345 bat2 C431 my_id A123 service C431 box1 A123 my_id I need two different outputs- OUTPUT1 A123... (6 Replies)
Discussion started by: smriti_shridhar
6 Replies
Login or Register to Ask a Question