Я хочу сконденсировать список диапазонов (от-до)

У меня есть данные с кодами, присвоенными диапазонам в форме

From To Code 0 5 A 5 10 A 10 15 A 15 20 B 20 25 B 25 30 A 30 35 A 35 40 A 40 45 C 45 50 C 50 55 C 55 60 B 60 65 B 65 70 B 

Я хочу сконденсировать этот список в список, подобный этому

 From To Code 0 15 A 15 25 B 25 40 A 40 55 C 55 70 B 

где смежные диапазоны (например, 0-5, 5-10 и 10-15) с тем же кодом объединяются. Мне интересно, можно ли это сделать sed или awk .

3 Solutions collect form web for “Я хочу сконденсировать список диапазонов (от-до)”

Это легко сделать с помощью awk

 awk ' NR==1{ print next } f!=$3{ if(NR!=2) print(line) printf("%s\t",$1) f=$3 } { line=$2 "\t" $3 } END{ print line } ' 

Использование полных текстовых замещений:

 perl -p0E 'while( s/\n(\d+\s+)(\d+)\s+(\w+)\n\2\s+(\d+\s+\3)/\n$1$4/ ){}' 

или с комментариями и отступом …

 perl -p0E 'while( # while we can s/\n # substitute (\d+ \s+) (\d+) \s+ (\w+) \n # n1 n2 id \2 \s+ (\d+ \s+ \3 ) # n2 n3 id by /\n$1$4/x # n1 n3 id ){}' 

Если данные всегда в порядке (как вы представили), тогда вы можете просто анализировать строки, находящие первую и последнюю строку в «группе», где код тот же. Для каждой группы сохраните значение «from» для первой строки и значение «to» для последней строки (до изменения кода). Распечатайте эти группы, используя сохраненные значения.

  • sed - удаление нуля - / 08 / to / 8 /
  • Заменить колонку с результатом команды
  • Как экспортировать данные в терминал в файл (например, файл csv)
  • используйте gff2fasta вместо сценария bash, чтобы получить части ДНК-последовательностей из полного генома
  • Замена строки во всех файлах, найденных grep. Не могу заставить его работать
  • Можно ли сделать sed делать некоторую логику в замещающей части (группа регулярных выражений)
  • sed для замены любой записи в файле конфигурации
  • Grepping и sedding IP из ip addr show
  • Анализ файлов журнала с помощью sed -e. Нужно учитывать уникальные имена классов
  • Извлечение строк между специальными символами
  • Почему это не работает, когда я добавляю его к текущему запуску sed?
  • Linux и Unix - лучшая ОС в мире.