Convert rows into columns using awk or perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Convert rows into columns using awk or perl
# 1  
Old 12-14-2012
Convert rows into columns using awk or perl

hi friends,
i am able to parse cvs diff file using bit of cut and grep commands to produce following output in text file
'''cvs-diff.txt'''
Code:
Package-Name = dev-freetype.

Old-Version = 2.4.8

New-Version = 2.4.10

Patches-removed = freetype-2.4.8-cross-compile.patch freetype-2.4.8-opentype.patch freetype-2.4.8-yahoo-widget.patch

Patches-added = freetype-2.4.10-cross-compile.patch freetype-2.4.10-opentype.patch freetype-2.4.10-yahoo-widget.patch
*****

Package-Name = dev-glib.

Old-Version = 2.24.2

New-Version = 2.32.0

Patches-removed = glib-patch1.patch

Patches-added =  glib-patch2.patch
*****

Package-Name = host-elfutils.

Old-Version = 0.130

New-Version = 0.152

Patches-removed = elfutils-strip-copy-symtab.patch elfutils-portability.patch elfutils-robustify.patch elfutils-0.130-fixes.patch elfutils-0.130-fix-libelf-off64_t.patch elfutils-0.130-sigfpe-fix.patch

Patches-added = elfutils-%{version}-portability.patch elfutils-%{version}-robustify.patch
*****

But now i want the output in rows and columns something like
this
Code:
Package-Name      Old-Version    New-Version     Patches-removed                Patches-added 

dev-freetype.      2.4.8          2.4.10      freetype-2.4.8-cross-compile.patch        freetype-2.4.10-cross-compile.patch
                                              freetype-2.4.8-opentype.patch              freetype-2.4.10-opentype.patch
                                              freetype-2.4.8-yahoo-widget.patch          freetype-2.4.10-yahoo-widget.patch






dev-glib.           2.24.2         2.32.0        glib-patch1.patch                       glib-patch2.patch







 host-elfutils.     0.130            0.152        elfutils-strip-copy-symtab.patch        elfutils-%{version}-portability.patch
                                                  elfutils-portability.patch              elfutils-%{version}-robustify.patch

any suggestions will be really helpfull . thx in advance
# 2  
Old 12-14-2012
Code:
#!/usr/bin/perl

$complete=0;
while(<DATA>){
    push @{$data{$1}},$2 if /^([\w-]+)\s=\s(.+)$/;
    push @headers,$1 if (! $complete);
    $complete++ if/^\*+$/;
}
print join("\t\t",@headers),"\n";
for $index (0..$complete){
    for $field (@headers){
        print "$data{$field}->[$index]\t\t";
    }
    print "\n";
}
__DATA__
Package-Name = dev-freetype.

Old-Version = 2.4.8

New-Version = 2.4.10

Patches-removed = freetype-2.4.8-cross-compile.patch freetype-2.4.8-opentype.patch freetype-2.4.8-yahoo-widget.patch

Patches-added = freetype-2.4.10-cross-compile.patch freetype-2.4.10-opentype.patch freetype-2.4.10-yahoo-widget.patch
*****

Package-Name = dev-glib.

Old-Version = 2.24.2

New-Version = 2.32.0

Patches-removed = glib-patch1.patch

Patches-added =  glib-patch2.patch
*****

Package-Name = host-elfutils.

Old-Version = 0.130

New-Version = 0.152

Patches-removed = elfutils-strip-copy-symtab.patch elfutils-portability.patch elfutils-robustify.patch elfutils-0.130-fixes.patch elfutils-0.130-fix-libelf-off64_t.patch
elfutils-0.130-sigfpe-fix.patch

Patches-added = elfutils-%{version}-portability.patch elfutils-%{version}-robustify.patch
*****

# 3  
Old 12-14-2012
Try ..

There is some problem for text alignments..

Code:
awk '! /\*\*\*\*/{A[$1]++;for(i=3;i<=NF;i++){arr[$1,++B[$1]]=$i}}END{for(i in A){s=s?s"\t"i:i;if(n<B[i]){n=B[i]}}print s;s="";
    for(i=1;i<=n;i++){for(j in A){s=s?s"\t"arr[j,i]:arr[j,i]}print s;s=""}}' file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert rows into columns and create table with awk

Hello I've four fields . They are First Name, Last Name, Age, Country. So when I run a Unix command, I get below output with these fields comes every time in different order as you can see. Some times first name is the first row and other time last name is first row in the output and etc etc..... (9 Replies)
Discussion started by: rprpr
9 Replies

2. Shell Programming and Scripting

Convert rows to columns

hi folks, I have a sample data like what is shown below: 1,ID=1000 1,Org=CedarparkHospital 1,cn=john 1,sn=doe 1,uid=User001 2,uid=User002 2,ID=2000 2,cn=steve 2,sn=jobs 2,Org=Providence I would like to convert it into the below format: 1,1000,CedarparkHospital,john,doe,User001... (11 Replies)
Discussion started by: vskr72
11 Replies

3. Shell Programming and Scripting

Convert rows to columns

I am looking to print the data in columns and after every 3 words it should be a new row. cat example.out | awk 'END { for (i = 0; ++i < m;) print _;print _ }{ _ = _ x ? _ OFS $1 : $1}' m=1| grep -i INNER I am looking to print in a new line after every 3 words. ... (2 Replies)
Discussion started by: lazydev
2 Replies

4. Shell Programming and Scripting

Convert Rows to Columns

Hi Everyone, Could someone shed some lights on how to convert the records in rows form into column basis. 172.29.59.12 IBM,8255-E8B 102691P 8 65536 MB 6100-04-11-1140 172.29.59.15 IBM,8255-E8B 102698P 4 45056 MB 6100-04-11-1140 IP SYS MODEL ... (6 Replies)
Discussion started by: ckwan
6 Replies

5. UNIX for Dummies Questions & Answers

Awk: convert rows to columns every n lines

Hi guys! I use AWK commands under GAMS to predispose the data files to be read by GAMS. I have a file which contains groups of data I need. Unfortunately I have the data spread in 3 rows for each subject. Here's an example (the file is really long) 1 0 2.0956 100.00 250.00 100.00 2.0956... (4 Replies)
Discussion started by: Pintug
4 Replies

6. Shell Programming and Scripting

How to Convert rows in to columns?

Hi Gurus, How to convert rows in to columns using linux shell scripting Input is like (sample.txt) ABC DEF GHI JKL MNO PQR STU VWX YZA BCD output should be (sampleoutput.csv) ABC,DEF,GHI,JKL,MNO PQR,STU,VWX,YZA,BCD (2 Replies)
Discussion started by: infasriniit
2 Replies

7. Shell Programming and Scripting

Convert few columns to rows

Hi! Does anybody help me in converting following data: INPUT looks like this: 20. 100. 30 200. 40. 400. 50. 100. 60. 200. 70. 400. 80. 200. 150. 210. 30. 100. OUTPUT should look like this: 20. 100. 30 200. 40. 400. 50. 100. 60. 200. 70.... (5 Replies)
Discussion started by: lovelinux
5 Replies

8. Shell Programming and Scripting

Convert columns to rows in perl script

Hi All I want to have a Perl script which convert columns to rows. The Perl should should read the data from input file. Suppose the input file is 7215484 date to date 173.3 A 1.50 2.23 8.45 10.14 2.00 4.50 2.50 31.32 7216154 month to month (3 Replies)
Discussion started by: parthmittal2007
3 Replies

9. UNIX for Dummies Questions & Answers

Convert rows to columns using AWK

Hi , I am struck while coding AWK script. Need your help to convert rows into columns. I should copy only those rows which are marked to Y in a file and ignore N rows. Please help me find a solution. input file 1|abc|Y 2|cdf|Y 3|efg|N 4|xyz|Y my output should be something like this... (2 Replies)
Discussion started by: rashmisb
2 Replies

10. Shell Programming and Scripting

how to convert columns to rows

Hi, I need a shell script for below requirement Input file P1 - 173310 P2 - 173476 P3 - 173230 P4 - 172737 P1 - 173546 P2 - 173765 P3 - 173876 P4 - 172989 Out put file P1 173310 173546 P2 173476 173765 P3 173230 173876 P4 172737 172989 Suresh (6 Replies)
Discussion started by: suresh3566
6 Replies
Login or Register to Ask a Question