two-column data to matrix in AWK


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting two-column data to matrix in AWK
# 1  
Old 04-06-2011
two-column data to matrix in AWK

Howdy,

I need to convert an association data matrix, currently in a two-column format, into a matrix with numbers indicating the number of associations. I've been looking around for AWK code in the list, but could not find anything. Here's an example of what I want to perform:


Code:
original data

X	A
X	B
Y	A
Y	C
Z	B
Z	C

desired output
	A	B	C
X	1	1	0
Y	1	0	1
Z	0	1	1


Thanks in advance for any advice!
# 2  
Old 04-06-2011
How many different values can you have in column 1 and column 2?
# 3  
Old 04-06-2011
For my real dataset, I have something like 80 values in column 1 and 300 values for column 2. Thanks.
# 4  
Old 04-06-2011
Quote:
Originally Posted by Shell_Life
How many different values can you have in column 1 and column 2?
This should not matter.
Code:
nawk '{a[$1,$2]++;r[$1];c[$2]}END {for(ci in c) printf OFS ci;print "";for (ri in r) {printf ri; for (ci in c) {idx=ri SUBSEP ci;printf OFS ((idx in a)?a[idx]:0)}print ""}}' OFS='\t' myFile

This User Gave Thanks to vgersh99 For This Post:
# 5  
Old 04-06-2011
it worked vgersh99! I just used awk.
# 6  
Old 04-06-2011
You can also have a look at this thread which not exactly but very similar to that one
# 7  
Old 04-06-2011
Perl
Code:
#!/usr/bin/perl

while (<DATA>) {
@a=split(/\s+/);
unless (exists $col2{$a[1]}) {$col2{$a[1]}++;}
$b{$a[0]}=$b{$a[0]}." ".$a[1];
}

printf "\t";
printf "%s ",$_ foreach (sort(keys(%col2)));
print "\n";

$sc=keys %col2;
foreach (sort(keys(%b))){
printf "%s\t","$_";
   undef @fld;
   @fld=split(/\s+/,$b{$_});
        $lst=1;
        foreach (sort(keys(%col2))) {
        $cl=$_;
        for($i=$lst;$i<=$sc;$i++) {
        if ($cl eq $fld[$i]) {printf "%s ","1";$lst=$i+1;last;} else {printf "%s ","0";$lst=$i;last;}
        }
        }
        printf "\n";
}

__DATA__
X       A
X       B
Y       A
Y       C
Z       B
Z       C
P       A
Q       A

This User Gave Thanks to pravin27 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to get row data printed in column using awk?

Hi team, I have below sample file. $ cat sample dn: MSISDN=400512345677,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=stc structuralObjectClass: NphData objectClass: NphData objectClass: MSISDN entryDS: 0 nodeId: 35 createTimestamp: 20170216121047Z modifyTimestamp: 20170216121047Z... (3 Replies)
Discussion started by: shanul karim
3 Replies

2. Shell Programming and Scripting

Transpose matrix based on second column using awk

Hi, Is it possible to transpose the matrix like this using awk ? Many thanks in advance Input abc Name_1 0 abc Name_2 1 abc Name_3 2 abc Name_4 0.4 def Name_1 0 def Name_2 9 def Name_3 78 def Name_4 1 Output abc def Name_1 0 ... (4 Replies)
Discussion started by: quincyjones
4 Replies

3. Shell Programming and Scripting

How order a data matrix using awk?

is it possible to order the following row clusters from ascending to descending. thanx in advance input 1 2 4 0 1 2 4 0 3 3 3 3 1 5 1 0 1 5 1 0 6 0 0 0 5 1 1 1... (4 Replies)
Discussion started by: quincyjones
4 Replies

4. Shell Programming and Scripting

column to matrix

Hello All, I need your help in the following problem. I have a matrix of 500 columns and 1000 rows and in each cell, it is having a value range from 0 to 9. I would like to convert each column in to a matrix, according to the value in each cell (ie) 0 to 9. For each column, I need a matrix... (5 Replies)
Discussion started by: Fredrick
5 Replies

5. Shell Programming and Scripting

3 column .csv --> correlation matrix; awk, perl?

Greetings, salutations. I have a 3 column csv file with ~13 million rows and I would like to generate a correlation matrix. Interestingly, you all previously provided a solution to the inverse of this problem. Thread title: "awk? adjacency matrix to adjacency list / correlation matrix to list"... (6 Replies)
Discussion started by: R3353
6 Replies

6. Shell Programming and Scripting

Printing another column using awk and input data

Hi, I have data of the following type, chr1 234 678 39 852 638 abcd 7895 chr1 526 326 33 887 965 kilj 5849 Now, I would like to have something like this chr1 234 678 39 852 638 abcd 7895 <a href="http://unix.com/thread=chr1:234-678">Link</a> chr1 526 326 33 887 965 kilj 5849 <a... (5 Replies)
Discussion started by: jacobs.smith
5 Replies

7. Shell Programming and Scripting

convert data into matrix- awk

is it possible to count the number of keys based on state and cell and output it as a simple matrix. Ex: cell1-state1 has 2 keys cell3-state1 has 4 keys. Note: Insert 0 if no data available. input key states cell key1 state1 cell1 key1 state2 cell1 key1 ... (21 Replies)
Discussion started by: quincyjones
21 Replies

8. Ubuntu

How to convert full data matrix to linearised left data matrix?

Hi all, Is there a way to convert full data matrix to linearised left data matrix? e.g full data matrix Bh1 Bh2 Bh3 Bh4 Bh5 Bh6 Bh7 Bh1 0 0.241058 0.236129 0.244397 0.237479 0.240767 0.245245 Bh2 0.241058 0 0.240594 0.241931 0.241975 ... (8 Replies)
Discussion started by: evoll
8 Replies

9. Emergency UNIX and Linux Support

AWK - check column data

Hi, I have a data in a file . Infile: 1 e 1.2 1.6 5 f 2.3 3.6 3 g 1.2 2.6 6 i 2.3 3.6 8 o 1.2 3.6 output: 1 e 1.2 1.6 5 f 2.3 3.6 3 g 1.1 2.6 6 i 2.2 3.5 8 o 1.0 3.4 (17 Replies)
Discussion started by: vasanth.vadalur
17 Replies

10. Shell Programming and Scripting

extract data from a data matrix with filter criteria

Here is what old matrix look like, IDs X1 X2 Y1 Y2 10914061 -0.364613333 -0.362922333 0.001691 -0.450094667 10855062 0.845956333 0.860396667 0.014440333 1.483899333... (7 Replies)
Discussion started by: ssshen
7 Replies
Login or Register to Ask a Question