arrays in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting arrays in awk
# 1  
Old 04-17-2009
arrays in awk

Hi,

I have the following data in a file for example:

Name="Fred","Bob","Peterson","Susan","Weseley"
Age="24","30","28","23","45"
Study="English","Engineering","Physics","Maths","Psychology"
Code="0","0","1","1","0"
Name="Fred2","Bob2","Peterson2","Susan2","Weseley2"
Age="23","29","25","21","44"
Study="English2","Engineering2","Physics2","Maths2","Psychology2"
Code="1","1","1","1","1"

Can you help me with an awk script to print the file such as:


Name,Age,Study,Code
Fred,24,English,0
Bob,30,Engineering,0
Peterson,28,Physics,1
Susan,23,Maths,1
Weseley,45,Psychology,0
Fred2,23,English2,1
Bob2,29,Engineering2,1
.
.
.

Thanks

Last edited by james2009; 04-17-2009 at 09:34 AM..
# 2  
Old 04-17-2009
TESTBOX> sed -e 's/=/,/' -e 's/"//g' inp.txt

Name,Fred,Bob,Peterson,Susan,Weseley
Age,24,30,28,23,45
Study,English,Engineering,Physics,Maths,Psychology
Code,0,0,1,1,0
# 3  
Old 04-17-2009
@panyam, wrong output

@OP, here's a Perl solution
Code:
my $file="file";
my @array;
open(IF,"<",$file) or die "Cannot open input file:$!\n";
while(my $line = <IF>){
 chomp($line);
 push(@array,[split/=|,/,$line]); 
}
for $i ( 0 .. $#{$array[0]} ) {
    for $j ( 0 .. $#array ) {
        if( $j==$#array){
            print "$array[$j][$i]\n";
        }else{
            print "$array[$j][$i] ";   
        }
    }
}

output
Code:
# ./test.pl
Name Age Study Code
"Fred" "24" "English" "0"
"Bob" "30" "Engineering" "0"
"Peterson" "28" "Physics" "1"
"Susan" "23" "Maths" "1"
"Weseley" "45" "Psychology" "0"

# 4  
Old 04-17-2009
panyam,

Your script only removes the double quotes and does not format it correctly. I need the output to be like this

Name,Age,Study,Code
Fred,24,English,0
Bob,30,Engineering,0
Peterson,28,Physics,1
# 5  
Old 04-17-2009
Ohh ...I am sorry i did not check OP properly...
# 6  
Old 04-17-2009
Code:
open $fh,"<","a.spl";
my (%hash,%h,$cnt);
while(<$fh>){
	chomp;
  my @arr=split("=",$_);
  my @tmp=split(",",$arr[1]);
  map {s/"//g} @tmp;
  $hash{$arr[0]}=\@tmp;
  $cnt=$#tmp if $cnt==0;
  $h{$arr[0]}=$.;
}
my @brr=sort {$h{$a} <=> $h{$b}} keys %hash;
print join ",",@brr;
print "\n";
for(my $i=0;$i<=$cnt;$i++){
	foreach $k (@brr){
		print $hash{$k}->[$i],",";
	}
	print "\n";
}

# 7  
Old 04-17-2009
James the solution was already present in the forum . I just googled it.

https://www.unix.com/shell-programmin...transpose.html

I hope the given shell script ( in the URL) work fine.Before running the script make sure that input file is a comma seperated file.

this is wht the op i got

avalon:/disk1/jvsh/TEST>awk -f testawk.awk 1.txt
Name Age Study Code
Fred 24 English 0
Bob 30 Engineering 0
Peterson 28 Physics 1
Susan 23 Maths 1
Weseley 45 Psychology 0

Last edited by panyam; 04-17-2009 at 06:42 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk Arrays

So I'm back once again beating my head off a wall trying to figure out how to get this to work. My end goal is to take input such as what's below, which will be capture in real time with a tail -f from a file or piped output from another command: ... (5 Replies)
Discussion started by: ShadowBlade72
5 Replies

2. Shell Programming and Scripting

Using arrays with awk

I'm a little stuck and would be grateful of some advice! I have three files, two of which contain reference data that I want to add to a line of output in the third file. I can't seem to get awk to print array contents as I would expect. The input files are: # Input file AAA,OAA,0313... (2 Replies)
Discussion started by: maccas17
2 Replies

3. Shell Programming and Scripting

help in awk arrays!

Hi, buddies I am new to shell scripting and trying to solve a problem. I read about arrays in awk that they are quite powerful and are associative in nature. Awk Gurus Please help! I have a file: Id1 pp1 0t4 pp8 xy2 Id43 009y black Id6 red xy2 Id12 new pp1 black I have... (5 Replies)
Discussion started by: geli21
5 Replies

4. UNIX for Dummies Questions & Answers

awk arrays

Hi Can someone please explain the logic of awk arrays. I have been doing some reading but I dont understand this: #!/usr/bin/gawk -f { arr++; } end { for(i in arr) { print arr,i } } As I understand arr refs the arrays index, so while $2 is a string that cant... (2 Replies)
Discussion started by: chronics
2 Replies

5. Shell Programming and Scripting

awk arrays can do this better - but how?

Hi, I have spent the afternoon trawling Google, Unix.com and Unix in a Nutshell for information on how awk arrays work, and I'm not really getting too far. I ahve a batch of code that I am pretty sure can be better managed using awk, but I'm not sure how to use awk arrays to do what I'm... (1 Reply)
Discussion started by: littleIdiot
1 Replies

6. Shell Programming and Scripting

Arrays in awk

Hi, I've written the following code to manipulate the first 40 lines of a data file into my desired order: #!/bin/awk -f { if (NR<=(4)){ a=a$0" "} else { if ((NR >= (5)) && (NR <= (13))) { b=b$0" " } else {if ((NR >= (14)) && (NR <= (25))){ c=c$0" "} ... (5 Replies)
Discussion started by: catwoman
5 Replies

7. Shell Programming and Scripting

Need Help with awk and arrays

now its owkring - thanks fo rthe help all . (7 Replies)
Discussion started by: fusionX
7 Replies

8. Shell Programming and Scripting

awk arrays

Guys, OK so i have been trying figure this all all day, i guess its a pretty easy way to do it. Right, so i have to column of data which i have gotten from one huge piece of data. What i would like to do is to put both of these into one array using awk. Is this possible?? If so could... (1 Reply)
Discussion started by: imonthejazz
1 Replies

9. Shell Programming and Scripting

arrays in awk???

Been struggling with a problem, I have been trying to do this in awk, but am unable to figure this out, I think arrays have to be used, but unsure how to accomplish this. I have a input file that looks like this: 141;ny;y;g 789;ct;e;e 23;ny;n;u 45;nj;e;u 216;ny;y;u 7;ny;e;e 1456;ny;e;g... (3 Replies)
Discussion started by: craigsky
3 Replies

10. UNIX for Advanced & Expert Users

Two or more arrays in Awk

Hi All, I have been working on awk and arrays. I have this small script: cat maillog*|awk -F: '$2=="SMTP-Accept" && $5~/string/ {lastdate=substr($1,1,8); internaluser=$5; v++} END {for (j in v) {print lastdate, v, j}'| sort>> mail.list This gives me the number of mails users are getting. ... (1 Reply)
Discussion started by: nitin
1 Replies
Login or Register to Ask a Question