Пренаредете колоните в таблица

Имам файл, разделен с интервал, като този:

GID_1 AID_1 2
GID_1 AID_2 1
GID_1 AID_3 3
GID_2 AID_1 3
GID_2 AID_2 1
GID_2 AID_3 2
GID_3 AID_1 1
GID_3 AID_2 1
GID_3 AID_3 3

и бих искал да транспонирам колони 1 и 3 с колона 2 и да имам това:

(X)   GID_1 GID_2 GID_3
AID_1  2     3     1
AID_2  1     1     1
AID_3  3     2     3

Поставих "(X)", защото това транспониране ще направи това поле празно, което е добре за мен.

Моля, може ли някой да ми помогне за това?


person NickSerao    schedule 17.10.2013    source източник
comment
Този въпрос е доста различен от предложения дубликат.   -  person Thor    schedule 17.10.2013
comment
@Thor Прав си. В предложените дублиращи се етикети на редове са уникални.   -  person BartoszKP    schedule 17.10.2013
comment
Точно, не виждам как се прилага дубликата тук... Искам да транспонирам по колона 2, а в дубликата просто транспонират всичко...   -  person NickSerao    schedule 17.10.2013
comment
@user2890714: Не мисля, че този процес се нарича транспониране, по-скоро бих казал пренареждане или реформиране или дори таблично представяне.   -  person Thor    schedule 17.10.2013


Отговори (1)


awk решение

awk -F" |_" '
    {
    g=g>$2?g:$2
    a=a>$4?a:$4
    arr[$2 " " $4]=$5
    } 
    END {
    for (j=1;j<=g;j++)
        {
        printf "\tGID_%s",j
        }
    print ""
    for (i=1;i<=a;i++)
        {
        printf "AID_%s",i
        for (j=1;j<=g;j++)
            {
            printf "\t%s",arr[j " " i]
            }
        print ""
        }
    }
    ' file
        GID_1   GID_2   GID_3
AID_1   2       3       1
AID_2   1       1       1
AID_3   3       2       3
person Jotne    schedule 23.10.2013