Vertical an horizontal pivoing in unix


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Vertical an horizontal pivoing in unix
# 1  
Old 02-20-2009
Lightbulb Vertical an horizontal pivoing in unix

Please help me to do Vertical an horizontal pivoing in unix in single run.
The input file is like this-


MRKT|PROD|PRD|FACT1|FACT2|FACT3|FACT4
M1|P1|PR1|F11|F12|F13|F14
M1|P1|PR2|F21|F22|F23|F24
M1|P1|PR3|F31|F32|F33|F34
M2|P2|PR1|F41|F42|F43|F44
M2|P2|PR2|F51|F53|F54|F55
M2|P2|PR3|F61|F64|F65|F66


and output file is like this-

MRKT|PROD|FACT|PR1|PR2|PR3
M1|P1|FACT1|F11|F21|F31
M1|P1|FACT2|F12|F22|F32
M1|P1|FACT3|F13|F23|F33
M1|P1|FACT4|F14|F24|F34
M2|P2|FACT1|F41|F51|F61
M2|P2|FACT2|F42|F52|F62
M2|P2|FACT3|F43|F53|F63
M2|P2|FACT4|F44|F54|F64
# 2  
Old 02-22-2009

Please describe the relationship between the two files; i.e. describe what is done to the first to get the second.
# 3  
Old 02-22-2009
Code:
#!/usr/bin/perl
use strict;
my (%hash,%h);
print "MRKT|PROD|FACT|PR1|PR2|PR3\n";
open FH,"<a.txt" or die "Can not open file";
while(<FH>){
	chomp;
	my @tmp=split("[|]",$_);
	my $key=$tmp[0]."|".$tmp[1];
	for(my $i=3;$i<=$#tmp;$i++){
		if($. == 1){
			$h{$i}=$tmp[$i];
		}
		else{
			$hash{$key}->{$h{$i}}.="|".$tmp[$i];
		}
	}
}
close FH;
for my $key (sort keys %hash){
	my %tmp=%{$hash{$key}};
	for my $k (sort keys %tmp){
		print $key,"|",$k,$tmp{$k},"\n";
	}
}

# 4  
Old 02-23-2009
Lightbulb

Thanks Cherry this helps but I have one more complication that ....there may be data like this -- (FOr few key values periods may differ and facts as well)

MRKT|PROD|PRD|FACT1|FACT2|FACT3|FACT4
M1|P1|PR1|F11|F12|F13|F14
M1|P1|PR3|F31|F32|F33|F34
M2|P2|PR1|F41|F42|F43|F44
M2|P2|PR2|F51|F53|F54|F55
M2|P2|PR3|F61|F64|F65|F66
M3|P3|PR3|F71|F72|

and important thing that fact columns may be variable as well...It is possible to address this using perl
# 5  
Old 02-23-2009
Hey Johnson. Here I am trying to do pivoting of the data. We have Market and Product for which we have variable number of facts and Period.
In input data key is made of markt,product and period and value is fact values but we need to do a pivoting so that key will be market,product and fact and value will be a period value.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need to move vertical to horizontal using paste

Source file Name:hostname1 Masking views : Yes Storage Group Names : hostname1 device (5): Name:hostname2 Masking views : Yes Storage Group Names : hostname2 device (5): Name:hostname3 Masking views : no Storage Group Names : hostname3 device (5):... (9 Replies)
Discussion started by: ranjancom2000
9 Replies

2. Shell Programming and Scripting

Transform vertical into horizontal list

Hi, I am creating a script that will pull data from database. The only thing missing now is that i have to transform the lines into horizontal list. EXAMPLE 2015-07-15 09:00:00.0 |TCSERVER01 |5354 2015-07-15 09:01:00.0 |TCSERVER01 |6899 ... (5 Replies)
Discussion started by: reignangel2003
5 Replies

3. UNIX for Dummies Questions & Answers

Print vertical to horizontal

Hi Masters, I need help to change my vertical data to horisontal input 2015-04-13|JS|741667 2015-04-13|JSJ|2272 2015-04-13|TMS|107099 2015-04-12|JMD|47945 2015-04-13|TM|760024 2015-04-13|JM|484508 2015-04-14|JMJ|318 2015-04-14|JSD|54436 2015-04-13|JM|15410 Output... (2 Replies)
Discussion started by: radius
2 Replies

4. UNIX for Dummies Questions & Answers

Change Vertical to Horizontal

I need to change data from vertical to horizontal but with condition input USA|80 AUS|40 BRA|33 VEGAS|40 KENTUCKY|50 NEWYORK|21 DARWIN|33 ADELAIDE|21 SAOPAOLO|44 RIO|89 GAPIZA|44 BENFLEX|32 AXIS|44 ACRE|56 HEIGHT|22 (5 Replies)
Discussion started by: radius
5 Replies

5. Shell Programming and Scripting

How do i do the vertical to horizontal??

51009 8746 8912 17986 20315 24998 5368 38934 7805 8566 (4 Replies)
Discussion started by: nikhil jain
4 Replies

6. Shell Programming and Scripting

awk in horizontal and vertical math

Based on input ail,UTT,id1_0,COMBO,21,24,21,19,85 al,UTHAST,id1_0,COMBO,342,390,361,361,1454 and awk code as awk -F, '{ K=0; for(i=NF; i>=(NF-4); i--) { K=K+$i; J=J+$i;} { print K } } END { for ( l in J ) printf("%s ",J); }' I'm trying to add columns and lines in single line. line... (6 Replies)
Discussion started by: busyboy
6 Replies

7. Shell Programming and Scripting

Vertical And Horizontal Pivoting

Hi All, My Input data is: A=1 B=2 My desired Output should be: A|B 1|2 Thanks in advance... (3 Replies)
Discussion started by: kmsekhar
3 Replies

8. UNIX for Dummies Questions & Answers

vertical to horizontal

dear all, i'm new to unix and i try to figure out the best case for making list of vertical text to become horizontal and skip the line 1 and 2. example text : Data DATE XXXXX MAX 47 53 49 51 48 48 7 46 51 8 25 (6 Replies)
Discussion started by: andrisetia
6 Replies

9. UNIX for Dummies Questions & Answers

Horizontal to vertical

Hi, Silly question, if I have an excel file that looks something like this: ................. Subject 1 Subject 2 Subject 3 Subject 4 Fever..............13...........9.............23..........14 Headache.........2............12...........18..........23... (3 Replies)
Discussion started by: Xterra
3 Replies

10. Shell Programming and Scripting

Draw a Horizontal and Vertical line on UNIX

I want to draw a horizontal and vertical line on Unix. Please suggest some solution. (11 Replies)
Discussion started by: allways4u21
11 Replies
Login or Register to Ask a Question