Перемещение строк с помощью awk/sed

Я хотел бы переместить строки на основе номера индекса.

Номера индексов показаны в первом столбце, строки показаны во втором столбце.

 1        path_sparc_ifu_dec_104  
 1        path_sparc_ifu_dec_105  
 2        path_sparc_ifu_dec_63  
 2        path_sparc_ifu_dec_92 
 3        path_sparc_ifu_dec_39  
 4        path_sparc_ifu_dec_43  
 4        path_sparc_ifu_dec_71  
 5        path_sparc_ifu_dec_103  
 6        path_sparc_ifu_dec_99  
 7        path_sparc_ifu_dec_55 
 7        path_sparc_ifu_dec_75  
 7        path_sparc_ifu_dec_93

Если номер индекса равен 1, соответствующие строки помещаются в первую строку. При этом номер индекса удаляется.

Желаемый результат:

path_sparc_ifu_dec_104  path_sparc_ifu_dec_105  
path_sparc_ifu_dec_63  path_sparc_ifu_dec_92 
path_sparc_ifu_dec_39  
path_sparc_ifu_dec_43  path_sparc_ifu_dec_71  
path_sparc_ifu_dec_103  
path_sparc_ifu_dec_99  
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93

Я думаю, что awk/sed может читать файл столбец за столбцом и перемещать строки, но мне нужна помощь!

Буду признателен за любую помощь в решении этой проблемы.

Лучший,

Джэён


person Jaeyoung Park    schedule 26.04.2016    source источник
comment
Попробуйте использовать $1 в качестве индекса массива и добавьте к нему пробел и $2. В правиле END распечатайте каждый элемент массива.   -  person ReluctantBIOSGuy    schedule 27.04.2016


Ответы (2)


Использование awk:

$ awk '{
    lines[$1] = ( $1 in lines ? lines[$1] FS $2 : $2 )
  } END {
     for (x in lines) print lines[x]
 }' file
path_sparc_ifu_dec_104 path_sparc_ifu_dec_105
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92
path_sparc_ifu_dec_39
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71
path_sparc_ifu_dec_103
path_sparc_ifu_dec_99
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93
person jaypal singh    schedule 26.04.2016

Моя версия:

$ awk '{if(prev==$1){printf(" ")}else{if(NR!=1){printf("\n")}};printf("%s",$2);prev=$1}END{printf("\n")}' file
path_sparc_ifu_dec_104 path_sparc_ifu_dec_105
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92
path_sparc_ifu_dec_39
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71
path_sparc_ifu_dec_103
path_sparc_ifu_dec_99
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93

Поскольку индексы отсортированы, мы просто печатаем значение второго столбца, но без новой строки. Когда номер индекса изменился, мы печатаем новую строку.

person Slava Semushin    schedule 26.04.2016