Crosstab


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Crosstab
# 1  
Old 02-02-2015
Crosstab

Good day everyone...

I need help to do crosstab over my file input

input
Code:
Nation|Country|Capital|Name|Notes|Final|1/1/2014|1/2/2014|1/3/2014|1/4/2014|1/5/2014|1/6/2014|12/25/2014|12/26/2014|12/27/2014|12/28/2014|12/29/2014|12/30/2014|12/31/2014|12/26/2014
India|Calcuta|New Delhi|Anja|No|Yes|0.00802523454488674|0.00718870309622937|0.00668183463961164|0.00708734929353649|0.00711947948811522|0.00672216051430008|0.00829922511113053|0.00865326433461789|0.0095347317725896|0.00992062885494416|0.0101082550618103|0.00965226637116291|0.0105377036818121|0.00865326433461789
Canada|Ottawa|Ottawa|Cedric|No|No|0.00694463160840849|0.00662456432199697|0.00681321803993624|0.00703480755373019|0.00633655907249729|0.00652425523108359|0.00717226883882143|0.00788301811339197|0.00934995141776595|0.00834943553340919|0.00813165511472526|0.00868150805231289|0.00801825745761948|0.00788301811339197
Pakistan|Islamabad|Islamabad|Ali|Yes|No|0.0144652010887942|0.0135290767633953|0.0132815839841639|0.0130410801591366|0.0131517257513035|0.0135129636205375|0.0129305981388591|0.0134733068967585|0.0157650133566409|0.0142009335286898|0.0153755589592332|0.0161931561124267|0.0189088445196573|0.0134733068967585

I need to do crosstab, so my expected output is:

Code:
India|Calcuta|New Delhi|Anja|No|Yes|1/1/2014|0.00802523454488674
Canada|Ottawa|Ottawa|Cedric|No|No|1/1/2014|0.00694463160840849
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/1/2014|0.0144652010887942
India|Calcuta|New Delhi|Anja|No|Yes|1/2/2014|0.00718870309622937
Canada|Ottawa|Ottawa|Cedric|No|No|1/2/2014|0.00662456432199697
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/2/2014|0.0135290767633953
India|Calcuta|New Delhi|Anja|No|Yes|1/3/2014|0.00668183463961164
Canada|Ottawa|Ottawa|Cedric|No|No|1/3/2014|0.00681321803993624
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/3/2014|0.0132815839841639
India|Calcuta|New Delhi|Anja|No|Yes|1/4/2014|0.00708734929353649
Canada|Ottawa|Ottawa|Cedric|No|No|1/4/2014|0.00703480755373019
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/4/2014|0.0130410801591366
India|Calcuta|New Delhi|Anja|No|Yes|1/5/2014|0.00711947948811522
Canada|Ottawa|Ottawa|Cedric|No|No|1/5/2014|0.00633655907249729
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/5/2014|0.0131517257513035
India|Calcuta|New Delhi|Anja|No|Yes|1/6/2014|0.00672216051430008
Canada|Ottawa|Ottawa|Cedric|No|No|1/6/2014|0.00652425523108359
Pakistan|Islamabad|Islamabad|Ali|Yes|No|1/6/2014|0.0135129636205375
India|Calcuta|New Delhi|Anja|No|Yes|12/25/2014|0.00829922511113053
Canada|Ottawa|Ottawa|Cedric|No|No|12/25/2014|0.00717226883882143
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/25/2014|0.0129305981388591
India|Calcuta|New Delhi|Anja|No|Yes|12/26/2014|0.00865326433461789
Canada|Ottawa|Ottawa|Cedric|No|No|12/26/2014|0.00788301811339197
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/26/2014|0.0134733068967585
India|Calcuta|New Delhi|Anja|No|Yes|12/27/2014|0.0095347317725896
Canada|Ottawa|Ottawa|Cedric|No|No|12/27/2014|0.00934995141776595
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/27/2014|0.0157650133566409
India|Calcuta|New Delhi|Anja|No|Yes|12/28/2014|0.00992062885494416
Canada|Ottawa|Ottawa|Cedric|No|No|12/28/2014|0.00834943553340919
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/28/2014|0.0142009335286898
India|Calcuta|New Delhi|Anja|No|Yes|12/29/2014|0.0101082550618103
Canada|Ottawa|Ottawa|Cedric|No|No|12/29/2014|0.00813165511472526
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/29/2014|0.0153755589592332
India|Calcuta|New Delhi|Anja|No|Yes|12/30/2014|0.00965226637116291
Canada|Ottawa|Ottawa|Cedric|No|No|12/30/2014|0.00868150805231289
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/30/2014|0.0161931561124267
India|Calcuta|New Delhi|Anja|No|Yes|12/31/2014|0.0105377036818121
Canada|Ottawa|Ottawa|Cedric|No|No|12/31/2014|0.00801825745761948
Pakistan|Islamabad|Islamabad|Ali|Yes|No|12/31/2014|0.0189088445196573


I did this

Code:
awk 'BEGIN {FS = "|t" ;}
{
for ( NR >1 && x=2 ; x<=NF ; x++)
{
for (NR == 1 && a=3 ; a<=NF ; a++)
{
M[a]=$a
}
BC = $1
print BC , M[x], $x
}
}
' input

# 2  
Old 02-02-2015
Try
Code:
awk     'NR==1          {split ($0, D)}
         NR>1           {for (i=7; i<=NF; i++) print $1,$2,$3,$4,$5,$6, D[i], $i}
        ' FS="|" OFS="|" file
India|Calcuta|New Delhi|Anja|No|Yes|1/1/2014|0.00802523454488674
India|Calcuta|New Delhi|Anja|No|Yes|1/2/2014|0.00718870309622937
India|Calcuta|New Delhi|Anja|No|Yes|1/3/2014|0.00668183463961164
.
.
.

This User Gave Thanks to RudiC For This Post:
# 3  
Old 02-03-2015
hows the explanation line by line Mr RudiC?
# 4  
Old 02-03-2015
Code:
awk     'NR==1          {split ($0, D)}                         # extract the dates from the header
         NR>1           {for (i=7; i<=NF; i++)                  # for all fields from 7 to end
                           print $1,$2,$3,$4,$5,$6, D[i], $i}   # print the constant 1 - 6 , then 
                                                                # date from header, then field i
        ' FS="|" OFS="|" file

 
Login or Register to Ask a Question

Previous Thread | Next Thread

1 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Crosstab to List table using awk Function

What I am trying to achieve is turning crosstab into a normal table e.g. convert following table Jan Feb Mar Apr May Jun Australia 1 2 3 4 5 6 USA 7 8 9 10 11 12 China 13 14 15 16 17 18 to Australia Jan 1 Australia Feb 2 Australia Mar 3 ... (2 Replies)
Discussion started by: asdban
2 Replies
Login or Register to Ask a Question