Как сортировать группы строк вместе?
у меня есть этот файл:
rs1 1 ADD 0.7 0.75 0.45
rs1 1 VAR 0.4 4.53 0.06
rs1 1 USER NA 1.96 0.37
rs2 2 ADD 1.5 0.25 0.23
rs2 2 VAR 0.4 4.86 0.03
rs2 2 USER NA 1.73 0.05
rs3 3 ADD 0.29 0.76 0.97
rs3 3 VAR 0.44 3.95 0.09
rs3 3 USER 0.96 5.41 0.01
для каждого значения есть три строки с
ADD
, VAR
, USER
на . Я хочу отсортировать (обратная сортировка) файл на основе
значения для строк с
USER
на . Вопрос в том, как я мог это сделать и в то же время сохранить соответствующие строки с
ADD
, VAR
рядом с отсортированными строками. Мне не нужны две другие строки для сортировки; мне просто нужно, чтобы они были рядом с sorted
линия.
желаемый результат:
rs3 3 ADD 0.29 0.76 0.97
rs3 3 VAR 0.44 3.95 0.09
rs3 3 USER 0.96 5.41 0.01
rs2 2 ADD 1.5 0.25 0.23
rs2 2 VAR 0.4 4.86 0.03
rs2 2 USER NA 1.73 0.05
rs1 1 ADD 0.7 0.75 0.45
rs1 1 VAR 0.4 4.53 0.06
rs1 1 USER NA 1.96 0.37
я пробовал этот код, но он только сортирует на основании значения
USER
строки:
cat File | sort -k1 | uniq | sort -g -k6 > Output
спасибо
2 ответов
Это немного грязный, но делает то, что вы хотите:
paste - - - < File | sort -k18,18g | xargs -n 6
проблема с форматом ввода заключается в том, что сортировка не может работать с группами входных строк, поэтому вам нужно превратить каждую группу в одну строку, отсортировать ее, а затем повернуть ее обратно. Это работает только в том случае, если строка ввода "пользователь" всегда последняя в группе.
вот однострочный для Ruby:)
ruby -e 'File.open(ARGV.shift).readlines.entries.group_by{|e| e.split[1]}.sort.reverse.each{|e| puts e[1]}' file
выход:
rs3 3 ADD 0.29 0.76 0.97
rs3 3 VAR 0.44 3.95 0.09
rs3 3 USER 0.96 5.41 0.05
rs2 2 ADD 1.5 0.25 0.23
rs2 2 VAR 0.4 4.86 0.03
rs2 2 USER NA 1.73 0.01
rs1 1 ADD 0.7 0.75 0.45
rs1 1 VAR 0.4 4.53 0.06
rs1 1 USER NA 1.96 0.37