Help making simple perl or bash script to create a simple matrix


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help making simple perl or bash script to create a simple matrix
# 1  
Old 04-25-2012
Help making simple perl or bash script to create a simple matrix

Hello all!
This is my first post and I'm very new to programming. I would like help creating a simple perl or bash script that I will be using in my work as a junior bioinformatician.

Essentially, I would like to take a tab-delimted or .csv text with 3 columns and write them to a "3D" matrix:

Input:


Code:
gene   sample   identifier
a         1        @
b         2        #
c         3,4      @
d         5        %  
d         5        *

Output:
Code:
          
        1         2          3         4         5

a       @        

b                 #

c                            @         @

d                                                %,*

Is this easy to do?
Thanks in advance

Jonathon

Last edited by torchij; 04-25-2012 at 02:06 PM..
# 2  
Old 04-25-2012
Quote:
Originally Posted by torchij
Is this easy to do?
Not really, no. Smilie Is this actual input? Are there any boundaries for these rows/columns? always single letter / single number?
# 3  
Old 04-25-2012
Sorry I'm just realizing the format of my message messed up when I posted. I'm trying to put it in a table now. Or is there a quick way to add an example excel file?
Jon
# 4  
Old 04-25-2012
not sure about excel. just select the area and click "CODE"

is the input file actually an .xls? will you be needing this conversion to work with standard unix utilities right? I've already got it mocked up in awk assuming space or tab delimiters.
# 5  
Old 04-25-2012
I updated my post, it should be more clear now.
The input will be a tab-delimited text file saved from excel.
Thank you so much for replying so fast. I'm loving this community already.
# 6  
Old 04-25-2012
Code:
$ ./gene  input
gene      1         2         3         4         5
a         @
b                   #
c                             @         @
d                                                 %,*

it's an awk script.
Code:
#!/usr/bin/awk -f

# keep list of unique genes, in order
!($1 in genes_uniq) { genes_uniq[$1]; genes[gene_idx++]=$1; }

{
        split($2, cols, /,/)
        for (col in cols) {
                if (cols[col] > max_col) max_col=cols[col]
                matrix[$1,cols[col]] = matrix[$1,cols[col]] "," $3
        }
}

END {
        # print header
        printf("%-9s ", "gene")
        for (col = 1; col <= max_col; col++)
                printf("%-9d ", col);
        printf("\n")

        for (i = 0; i < gene_idx; i++) {
                printf("%-9s ", genes[i]);
                for (col = 1; col <= max_col; col++)
                        printf("%-9s ", substr(matrix[genes[i],col],2));
                printf("\n");
        }
}

# 7  
Old 04-25-2012
I'm assuming it can be run as

Code:
$ awk -f code.awk input.txt > output.txt

?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Simple 4x4 matrix

I am trying to make a 4x4 matrix and I would greatly appreciate any help. I have 4 text files and I want to do the following. I want to concatenate them and gzip them. Then I want to find the file size of the concatenated file and subtract the value of file A. Finally, I want to output this final... (1 Reply)
Discussion started by: sdw8253
1 Replies

2. Shell Programming and Scripting

Convert bash to simple perl

please delete! (0 Replies)
Discussion started by: SkySmart
0 Replies

3. Shell Programming and Scripting

Covert simple bash script in perl language

Hello, Anyone please covert this in perl language ######################## if ps faux | grep -v grep | grep ProcessXYZ then echo "$SERVICE is running, , everything is fine" exit 0 else echo "$SERVICE is not running" exit 2 fi Additional... (1 Reply)
Discussion started by: fed.linuxgossip
1 Replies

4. Homework & Coursework Questions

Create a simple bash backup script of a file

This is the problem: Write a script that will make a backup of a file giving it a ‘.bak’ extension & verify that it works. I have tried a number of different scripts that haven't worked and I haven't seen anything really concise and to the point via google. For brevity's sake this is one of the... (4 Replies)
Discussion started by: demet8
4 Replies

5. Shell Programming and Scripting

Create simple script

Dear all, I have a directory named A and some subdirectories named B, C, D with .xml files. I want to use the following command to strip the file. sed -re ':start s/<*>//g; /</ {N; b start}' file.xml > file.xml At the same time, I want to remove the blank lines using sed '/^$/d' How can... (6 Replies)
Discussion started by: corfuitl
6 Replies

6. Shell Programming and Scripting

How to create a simple copy script?

Guys I want to do this: copy: /var/router/system1/config/backup/install.put /var/router/system2/config/backup/install.put /var/router/system3/config/backup/install.put /var/router/system4/config/backup/install.put into: /var/router/system1/config/install.dat... (22 Replies)
Discussion started by: DallasT
22 Replies

7. Shell Programming and Scripting

Hopefully a simple script, bash or perl...

I'm attempting to parse a file whose contents follow this format; 4:/eula.1028.txt: 8:/eula.1031.txt: 19:/eula.1033.txt: 23:/eula.1036.txt: 27:/eula.1040.txt: 31:/eula.1041.txt: 35:/eula.1042.txt: 39:/eula.2052.txt: 43:/eula.3082.txt: The number of lines of the file... (4 Replies)
Discussion started by: CudaPrime
4 Replies

8. Solaris

How to create a simple background script on Solaris

I have a local account for a unix server. The idle timeout for the account is around 10 mins. I have to login to the server multiple times during the day. Is there a way to increase the idle timeout or may be a script that I can run on background so it is not idle. Something like echo date every 9... (3 Replies)
Discussion started by: vinaysa
3 Replies

9. Shell Programming and Scripting

Simple Script to create folders

Hi I want to write a small script that will create folders named from `AAAA' all the way to `ZZZZ'. That is: `AAAA' `AAAB' `AAAC' ... `AABA' `AABB' `AABC' ... `ABAA' `ABAB' `ABAC' ... `ABBA' ... `ZZZZ' (4 Replies)
Discussion started by: ksk
4 Replies

10. Shell Programming and Scripting

Modifying simple commands to create a script

Can anyone direct me to a resource that explains scripting in simple terms? I have visited many sites and browsed this forum and have yet to find simple explanations. (8 Replies)
Discussion started by: rocinante
8 Replies
Login or Register to Ask a Question