Transpose column to row - awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Transpose column to row - awk
# 1  
Old 07-30-2013
Transpose column to row - awk

Hi there,

I have a small csv file example below:
Code:
 
source,cu_001,cu_001_volume,cu_001_mass,cu_002,cu_002_volume,cu_002_mass,cu_003,cu_003_volume,cu_003_mass
ja116,1.33,3024000,9374400,1.54,3026200,9375123,1.98,3028000,9385512

I want to transpose columns to rows starting at the second column and incrementing every third column. Desired output would be:

Code:
 
cu_001,1.33
cu_002,1.54
cu_003,1.98

My attempt is as follows:
Code:
 
gawk -F"," '{for (i=2; i<=NF; i+=3) col[i] = col[i] "," $i} END {for (i=2; i<=NF; i+=3) {print col[i]}}' OFS=, input_file.csv | gawk -F"," 'FNR != 1 {print $2","$3}' OFS=, > output_file.csv

However, the output I get is:
Code:
 
cu_002,1.54
cu_003,1.98

It's missing:
Code:
 
cu_001,1.33

Any help would be appreciatedSmilie

---------- Post updated at 07:29 AM ---------- Previous update was at 06:41 AM ----------

I figured it out. I just needed to get rid of FNR != 1. Edited code is:

Code:
 
gawk -F"," '{for (i=2; i<=NF; i+=3) col[i] = col[i] "," $i} END {for (i=2; i<=NF; i+=3) {print col[i]}}' OFS=, input_file.csv | gawk -F"," '{print $2","$3}' OFS=, > output_file.csv

# 2  
Old 07-30-2013
Code:
bash-3.2$ cat txt
source,cu_001,cu_001_volume,cu_001_mass,cu_002,cu_002_volume,cu_002_mass,cu_003,cu_003_volume,cu_003_mass
ja116,1.33,3024000,9374400,1.54,3026200,9375123,1.98,3028000,9385512
 
bash-3.2$ awk -F, 'NR==1{ {for(i=1;i<=NF;i++){ x[i]=$i }} } END {for(c in x){ print x[c]"="$c }}' txt
cu_003_mass=9385512
cu_003_volume=3028000
cu_003=1.98
cu_002_mass=9375123
cu_002_volume=3026200
cu_002=1.54
cu_001_mass=9374400
cu_001_volume=3024000
cu_001=1.33
source=ja116

If you just want cu_XXX

Code:
bash-3.2$ awk -F, 'NR==1{ {for(i=1;i<=NF;i++){ if($i ~ /^cu_[0-9]{3}$/){x[i]=$i} }} } END {for(c in x){ print x[c]"="$c }}' txt
cu_003=1.98
cu_002=1.54
cu_001=1.33

This User Gave Thanks to MR.bean For This Post:
# 3  
Old 07-30-2013
python

Code:
a=[]
with open("a.txt") as f:
 for line in f:
  words = line.split(",")
  a.append(words[1::3])
for i in range(len(a)):
 if(i==0): 
  pass
 else:
  for j in range(len(a[0])):
   print(a[0][j],a[i][j])

This User Gave Thanks to summer_cherry For This Post:
# 4  
Old 07-30-2013
Thanks for the reply's and extra examples, much appreciated Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How transpose column in a row?

Hello guys, First of all happy holidays and happy new year. I'm new in bioinformatic and also it is my first time that I write in this forum. Therefore, sorry if I make some mistakes. I'm writing to ask your help to fix a problem: I have a file like this: gene1 GO:0016491|GO:0055114... (8 Replies)
Discussion started by: Salvatore_espos
8 Replies

2. Shell Programming and Scripting

Transpose row to column

I'm using the testawk.awk from the following thread https://www.unix.com/shell-programming-and-scripting/18897-row-column-transpose.htmlI'm getting the following output fieldname1 data1 fieldname2 data2 fieldname3 data3 How can I get like this instead 1 fieldname1 data1 2 fieldname2 data2... (1 Reply)
Discussion started by: makkan
1 Replies

3. Shell Programming and Scripting

awk transpose column to row and sort

I am trying to awk the output from below output for each port: i need separate line with comma source file Output required (3 Replies)
Discussion started by: ranjancom2000
3 Replies

4. Shell Programming and Scripting

To transpose row into column

Hi All, In shell, I have below data coming from some some text file as below: . 351706 5861.8 0.026 0.012 12.584 0.026 0.012 12.582 0.000 0.000 0.000 Now i need the above data to be transposed as below 351706... (16 Replies)
Discussion started by: Anamica
16 Replies

5. Shell Programming and Scripting

Column to row Transpose

Hi Folks, Iam a kinda newbie to unix shell scripting, the scenario is i have a text file containing the following info Charlie chicago 15 Charlie newyork 26 jonny chicago 14 jonny newyork 15 joe chicago 15 joe newyork 18output should be Name chicago ... (3 Replies)
Discussion started by: tech_frk
3 Replies

6. UNIX for Dummies Questions & Answers

Row to column transpose

Hi there, Below is sample three rows which i need transpose into multiple rows. By keeping first 2 fields static and split them into multiple rows depend following date field. Each into seperate rows. Sample code: ... (6 Replies)
Discussion started by: ganeshd
6 Replies

7. Shell Programming and Scripting

awk to transpose preceding row to 1st column of next rows

Gurus: How can I transpose the output below to a format in which I can plot a graph to show VSZ memory usage by PIDs? stdout: Tue Jan 22 07:29:19 CUT 2013 42336296 1841272 java wilyadm 21889232 438616 jlaunch sidadm 42532994 414336 jlaunch sidadm Tue Jan 22 07:49:20 CUT 2013... (1 Reply)
Discussion started by: ux4me
1 Replies

8. Shell Programming and Scripting

awk transpose row into 2 field column

Need to transpose every 2 fields of a row into a single 2 field column. input 4 135 114 76 217 30 346 110 5 185 115 45 218 85 347 125 6 85 116 130 220 65 352 95 11 30 117 55 221 42 355 75 16 72 118 55 224 37 357 430 17 30 119 55 225 40 358 62 21 52 120 65 232 480 360 180 ....... (8 Replies)
Discussion started by: sdf
8 Replies

9. Shell Programming and Scripting

awk: Transpose csv row to column.

Hello, am I new to awk, and I am tryint to: INPUT FILE: "73423555","73423556","73423557","73423558","73423559" OUTPUT FILE: 73423555 73423556 73423557 73423558 73423559 My useless code so far: #!/bin/awk -F ',' BEGIN { i=0; } (8 Replies)
Discussion started by: drbiloukos
8 Replies

10. Shell Programming and Scripting

Transpose column to row

Hi i have a file which has values seperated by "," as shown below and I want to transpose for every doc_id in one row. Input: DOC_ID,KEYWORD 105,REGISTROS 105,GEOLOGIA 105,NUCLEOS 105,EXPEDIENTE 105,PROGRAMAS 10025,EXPEDIENTE 10025,LOCALIZACIONES 10025,OFICIOS 10025,PROGRAMAS... (4 Replies)
Discussion started by: juelillo
4 Replies
Login or Register to Ask a Question