Создание новой строки для каждого значения n столбцов с сохранением значения столбца 1

У меня есть следующий тип данных, разделенных вкладками (n-столбцы):

-2  abandonar   abandono    abandonas   abandona    abandonamos abandonáis  abandonan   
-4  abandonado  abandonada  abandonados abandonadas 
-2  abandona    abandonos                                       
-3  secuestrado secuestrada secuestrados    secuestradas    secuestraría    secuestrarías   secuestraríamos secuestraríais  secuestrarían

Мне нужно сохранить значения в столбце 1, но мне нужно, чтобы каждая строка в следующих столбцах была перемещена в свою собственную строку. Желаемый результат будет таким:

-2  abandonar
-2  abandono
-2  abandonas
-2  abandona
-2  abandonamos
-2  abandonáis
-2  abandonan   
-4  abandonado
-4  abandonada
-4  abandonados
-4  abandonadas 
-2  abandona    
-2  abandonos                                       
-3  secuestrado 
-3  secuestrada 
-3  secuestrados    
-3  secuestradas    
-3  secuestraría    
-3  secuestrarías   
-3  secuestraríamos
-3  secuestraríais
-3  secuestrarían

Есть ли в awk функция, позволяющая выполнять такие действия? Простая запись того, что мне нужно напечатать в каждой строке а-ля:

$awk '{print $1, $2, etc}'

было бы очень громоздко, особенно потому, что есть Code: n-columns

До сих пор я опробовал несколько awk решений, которые помогают решать проблемы, связанные с переносом данных. Я нашел эти решения здесь:

awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'

а также

awk '{
       for (f = 1; f <= NF; f++) { a[NR, f] = $f } 
     }
     NF > nf { nf = NF }
     END {
       for (f = 1; f <= nf; f++) {
           for (r = 1; r <= NR; r++) {
               printf a[r, f] (r==NR ? RS : FS)
           }
       }
    }' input

Однако они не совсем решают проблему, как вы, вероятно, видите, потому что я хочу, чтобы каждый столбец также был присоединен к исходному значению своей строки в столбце 1, а эти решения просто переставляют данные. Любые идеи о том, как я достигну желаемого результата?


person owwoow14    schedule 20.04.2015    source источник


Ответы (2)


Если я вас правильно понял, то

awk '{ for(i = 2; i <= NF; ++i) print $1, $i }' filename

должно сработать.

person Wintermute    schedule 20.04.2015
comment
Справедливости ради, поскольку оба ответа были одинаковыми, я просто выбрал первый в качестве правильного ответа. - person owwoow14; 20.04.2015
comment
@owwoow14 Выберите этот, они опередили меня на минуту :) - person ; 20.04.2015
comment
@JID ой! Ты прав! Извините: D Спасибо за помощь, решение (оба) сработало отлично! - person owwoow14; 20.04.2015

Не проверено, но это должно работать

awk '{for(i=2;i<=NF;i++)print $1,$i}' file
person Community    schedule 20.04.2015