Transpose a file


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Transpose a file
# 1  
Old 06-29-2015
Transpose a file

Hello,
I have a file which looks like this

Input:
Code:
Sample    Genotype    Assay    Well    plate
Sample1    T    xx    A01    1
Sample2    T    xx    A01    2
Sample3    T    xx    A01    3
Sample4    T    xx    A02    4
Sample5    T    xx    A02    5
Sample6    T    xx    A02    6
Sample7    NA    xx    B01    7.2
Sample8    T    xx    B01    8
Sample9    T    xx    B01    9
Sample10    T    xx    B01    10
Sample11        xx    B01    11
Sample12    T    xx    B10    1
Sample13    T    xx    C01    2
Sample14    T    xx    C01    3
Sample15    T    xx    C01    4
Sample16    T    xx    C01    5
Sample17    T    xx    C01    6
Sample18    T    xx    C01    7.1
Sample19    C    xx    D02    8
Sample20    C    xx    D02    9
Sample21    T    xx    D02    11.1

and I need to transform it into a grid using three columns, "genotype", "well" as the top row and "plate" as the first column to get an output that looks like this
Code:
       1    2    3    4    5    6    7.1    7.2    8    9    10    11    11.1
A01    T    T    T                                        
A02                T     T    T                            
B01    NA    T    T    T                                    
B10    T                                                
C01        T    T    T    T    T    T                        
D02                                    C    C            T

I can do this with excel but there are 13 "plates" and over 500 "wells". Can this be done using unix? many thanks
# 2  
Old 06-29-2015
This is not really what I would call a simple transposing function (flipping columns to rows and vice-versa) but you are looking to tabulate the input.

You could use arrays if you can be certain of the rows & columns you want to look for. You can then read the input and set a flag in the appropriate row/column of the array depending on what you read. Finally, you display the table based on the array values, just looping round them.


What have you tried so far?
What are you comfortable using/supporting? For example ksh only, perl, awk, sed, C?

For "plate" do you mean the column marked "Assay"?

Can you logically define the process you want to follow? If you can then with refinement we can work out the code you need.


Sorry for the questions, but I would prefer to get a good solution that you can maintain in future rather than just going "Ta-da!" and you have no idea how it works and I have no idea if it meets your needs when you have data that is larger than the sample.




Robin
# 3  
Old 06-29-2015
No problem. So what I intend to do is layout a grid to know the "genotype" (2nd column) for each "well" (4th column) against the "plate" (5th column)

As I mentioned before, I have started doing it in excel

I have used awk/sed a couple of times before as one liner functions to delete columns, replace values

For "plate" I mean the last column which has thirteen variables ranging from 1 to 11.1

The file has approx 4000 rows. So the unique values for the last column, ie "plates" will always be 13 variables, in the range 1 to 11.1 and for the "wells" will always be 384 variables ranging from A01-A24, B01-B24, C01-C24.... to P01-P24.
# 4  
Old 06-29-2015
Adapted from a similar solution on this forum


Code:
awk     'NR>1{LN[$4]; HD[$5]; MX[$4,$5]=$2}
         END    {               printf "%8s", ""; for (i in HD) printf "%8s", i; print "";
                 for (j in LN) {printf "%8s",j;   for (i in HD) printf "%8s", MX[j,i]; print ""}
                }
        '  file

This User Gave Thanks to senhia83 For This Post:
# 5  
Old 06-29-2015
Try
Code:
awk     'NR>1   {LN[$4]; HD[$5]; MX[$4,$5]=$2}
         END    {               printf "%10s", ""; for (i in HD) printf "%10s", i; print "";
                 for (j in LN) {printf "%10s",j;   for (i in HD) printf "%10s", MX[j,i]; print ""}
                }
        ' file
                            10       7.1       7.2      11.1         1         2         3         4         5         6         8         9
       C01                             T                                       T         T         T         T         T                    
       D02                                                 T                                                                     C         C
        11        xx                                                                                                                        
       A01                                                           T         T         T                                                  
       A02                                                                                         T         T         T                    
       B01                   T                  NA                                                                               T         T
       B10                                                           T

The line with "11" is there as your input file has a missing entry for it.
This User Gave Thanks to RudiC 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

Transpose a txt file

Hello, I have a text file with 148 rows and 2532691 columns. I need to transpose the data. The command that I am using is awk ' { for (i=1; i<=NF; i++) { a = $i } } NF>p { p = NF } END { for(j=1; j<=p; j++) { str=a for(i=2; i<=NR; i++){ ... (6 Replies)
Discussion started by: nans
6 Replies

2. UNIX for Dummies Questions & Answers

Transpose File

Have various files like this: InSlot=0x00000001 InPort=0x00000000 Inref=0x0000002f InSID=0x00000001 OutSlot=0x00000001 OutPort=0x00000002 Outref=0x00000000 OutSID=0x0000000b OutUName_2=14 InSlot=0x00000001 InPort=0x00000000 Inref=0x000001a8 InSID=0x00000001 OutSlot=0x00000001... (5 Replies)
Discussion started by: K@rlos
5 Replies

3. Shell Programming and Scripting

File transpose problem

Hi Friends, I have a file with a structure like this: <file1.csv> field1,field2,field3,field4,field5,field6,field7,field8,field9,field10,field11,field12 Few Salient points on the file's structure (1)The fields from field1 to field6 is fixed and they would always be present in the file... (2 Replies)
Discussion started by: mehimadri12
2 Replies

4. Shell Programming and Scripting

Transpose whole file and specific columns

Hi, I have a file like this a b c d e f g h i j k l Case1: I want to transpose the whole file Output1 a d g j b e h k c f i l Case2 Transpose a specific column - Say 3rd (6 Replies)
Discussion started by: jacobs.smith
6 Replies

5. Shell Programming and Scripting

Transpose a text file.

Hello, I have a text file which is like a matrix m rows and n columns. Now I want to convert it into n rows and m columns. Thanks for hint. (1 Reply)
Discussion started by: zhshqzyc
1 Replies

6. Shell Programming and Scripting

Transpose a file

input IndID ID1 ID2 ID3 a1 a/a b/b c/c a2 a/a b/b c/c a3 a/b b/b c/d a6 a/b b/b c/e a8 a/a b/c c/e a9 b/b b/d c/e output IDName IndID IDtype C_No ID1 a1 a/a 1 ID1 a2 a/a 1 ID1 a8 ... (1 Reply)
Discussion started by: stateperl
1 Replies

7. Shell Programming and Scripting

Rows to Columns - File Transpose

Hi I have an input file and I want to transpose it but I need to take care that if any field is missing for a record it should be popoulated with space for that field - using a shell script INFILE ---------- emp=1 sal=2 loc=abc emp=2 sal=21 sal=22 loc=xyz emp=5 loc=abc OUTFILE... (10 Replies)
Discussion started by: 46019
10 Replies

8. Shell Programming and Scripting

File Transpose

Hi ALL I have one input file say FILE1 which looks as below. a=1 b=2 c=3 a=4 b=5 c=6 . . . Here a,b,c...etc are variable names. The output file(FILE2) should look like 1,2,3 4,5,6 ..... ..... (5 Replies)
Discussion started by: 46019
5 Replies

9. Shell Programming and Scripting

Transpose an entire text file

Hello all, I want to transpose the rows of a file to the columns (every characters include spaces), i.e.: input: abcdefg 123 456 output: a1 b2 c3 d e4 f5 g6 I wrote a script: #!/bin/csh -f (15 Replies)
Discussion started by: heavenfish
15 Replies

10. Shell Programming and Scripting

transpose file

Hi all, I have a file in the below format.... <A> B C <A> E F <A> G H I need the result file to be: <A>BC <A>EF <A>GH (3 Replies)
Discussion started by: new_ds_man
3 Replies
Login or Register to Ask a Question