Convert Columns to Rows in a File

Hi
I have a input file in the format
ABC,111,2008Q2, 49K
ABC,111,2008Q3, 0K
ABC,111,2008Q4, 0K
ABC,222,2008Q2, 49K
ABC,222,2008Q3, 0K
ABC,222,2008Q4, 0K
XYZ,111,2008Q2, 49K
XYZ,111,2008Q3, 0K
XYZ,111,2008Q4, 0K
XYZ,222,2008Q2, 49K
XYZ,222,2008Q3, 0K
XYZ,222,2008Q4, 0K
The output file format should be
ABC
------------------
111
2008Q2 49K
2008Q3 0K
2008Q4 0K
222
2008Q2 49K
2008Q3 0K
2008Q4 0K
XYZ
------------------
111
2008Q2 49K
2008Q3 0K
2008Q4 0K
222
2008Q2 49K
2008Q3 0K
2008Q4 0K
This is the code that i came up with.
echo "" > data.txt
ini_var=`cat list.txt | cut -d "," -f1 | head -n 1`
echo $ini_var >> data.txt
echo "--------------------" >> data.txt
cat list.txt | \
while read line
do
var=`echo $line | cut -d "," -f1`
test "$ini_var" = "$var"
status_chk=$?
if [ $status_chk -eq 0 ]
then
hier_var=`echo $line | cut -d"," -f2`
qtr_var=`echo $line | cut -d"," -f3`
val_var=`echo $line | cut -d"," -f4`
echo "$hier_var $qtr_var $val_var " >> data.txt
else
ini_var="$var"
echo " " >> data.txt
echo $ini_var >> data.txt
echo "--------------------" >> data.txt
hier_var=`echo $line | cut -d"," -f2`
qtr_var=`echo $line | cut -d"," -f3`
val_var=`echo $line | cut -d"," -f4`
echo "$hier_var $qtr_var $val_var " >> data.txt

fi
done
----------------------------
My Code output:
ABC
------------------

111 2008Q2 49K
111 2008Q3 0K
111 2008Q4 0K
222 2008Q2 49K
222 2008Q3 0K
222 2008Q4 0K
Please let me know, how i can get the desired output.

Try...

$ awk -F, '$1!=p1{print $1;print "---"}$2!=p2{print $2}{print $3,$4;p1=$1;p2=$2}' file1
ABC
---
111
2008Q2  49K
2008Q3  0K
2008Q4  0K
222
2008Q2  49K
2008Q3  0K
2008Q4  0K
XYZ
---
111
2008Q2  49K
2008Q3  0K
2008Q4  0K
222
2008Q2  49K
2008Q3  0K
2008Q4  0K

thanks... that was awesome... :slight_smile:

open(FH,"<filename") or die "Can not open file";
while(<FH>){
	@arr=split(",",$_);
	$temp=sprintf("%s %s",$arr[0],$arr[1]);
	if($hash{$temp} eq ""){
		$hash{$temp}=sprintf("%s %s",$arr[2],$arr[3]);
	}
	else{
		$hash{$temp}=sprintf("%s%s %s",$hash{$temp},$arr[2],$arr[3]);
	}
}
close(FH);
for $key ( keys %hash){
	@arr1=split(" ",$key);
	print $arr1[0],"\n";
	print "------------------------\n";
	print $arr1[1],"\n";
	print $hash{$key};
}