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
# 15  
Old 04-25-2012
no favor. is hobby. keeps my skills going.
it's hard to see if lines up on terminal, how's this look in spreadsheet?
Code:
#!/usr/bin/awk -f

# TAB delimited
BEGIN { FS="\t" }

# skip header
NR==1 { next }

# strip DOS line endings
{sub(/\r$/,"")}

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

{
        # unquote
        gsub(/(^"|"$)/,"",$2)
        split($2, cols, /,/)
        for (col in cols) {
                # keep list of unique samples, in order
                if (! (cols[col] in samples_by_name)) {
                        samples_by_name[cols[col]]=samples_idx
                        samples_by_num[samples_idx++]=cols[col]
                }
                matrix[$1,cols[col]] = matrix[$1,cols[col]] "," $3
        }
}

END {
        # print header
        printf("gene\t")
        for (i = 0; i < samples_idx; i++)
                printf("%s\t", samples_by_num[i])
        printf("\n")

        for (i = 0; i < genes_idx; i++) {
                printf("%s\t", genes_by_num[i]);
                for (j = 0; j < samples_idx; j++)
                        printf("%s\t", substr(matrix[genes_by_num[i],samples_by_num[j]],2))
                printf("\n")
        }
}

# 16  
Old 04-25-2012
It looks like this worked. Simply amazing. Thanks so much for your help. If I find an error I will let you know.
Cheers.
# 17  
Old 04-26-2012
Just giving a shoot: Smilie

Using Python3.2:

Code:
f = open('/path/to/input/file.txt' , 'r')
matrix={}
f.readline()
for line in f:
	(gene,sample,id) = line.split()
	sample = sample.split(',')
	for sam in sample:
		matrix.setdefault(gene,{}).setdefault(sam,[]).append(id)

when printing the 'matrix'
Code:
The Output is:-
print(matrix)
>>> {'a': {'1': ['@']}, 'c': {'3': ['@'], '4': ['@']}, 'b': {'2': ['#']}, 'd': {'5': ['%', '*']}}

for example
1- If I want gene "c" in sample "4" I write print(matrix['c']['4'][0])
2- If I want gene "c" in sample "3" I write print(matrix['c']['3'][0])
etc...

SmilieSmilieSmilieSmilie
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