Переставить столбцы в таблицу

У меня есть файл с разделителями-пробелами, например:

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
@ Тор Ты прав. В предлагаемом дублирующемся ряду метки уникальны.   -  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