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

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

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» для последней строки (до изменения кода). Распечатайте эти группы, используя сохраненные значения.

  • Получить содержимое файла из первого экземпляра в последний экземпляр некоторой произвольной строки
  • ошибка в awk / sed использование манипуляций с файлами по очереди
  • Как напечатать самое длинное число в строке?
  • Удалить длинную строку из файлов
  • вырезать последние два с sed?
  • Как найти и заменить в одном поле на основе значения в другом поле?
  • Поиск и замена с помощью sed
  • Найти и заменить значения с помощью счетчиков
  • Объединить два greps в одну команду
  • разделить большой файл на новый файл с уникальными именами файлов
  • Каков правильный способ вставки \ u с помощью sed?
  • Заменить определенный текст в фигурных скобках
  • Interesting Posts

    Докерный запуск вызывает панику ядра

    GRUB устанавливается с каждой ОС. Какой из них действительно используется?

    Могу ли я запустить bluetooth deamon без подключения usb-ключа?

    Как установить драйверы winio-win для установки Windows на KVM

    Инструмент стиля Solaris ptree для Linux

    Как контролировать блокировку / разблокировку экрана в Ubuntu 14.04

    Разрешение конфликтов pc FreeBSD

    Транспортировка событий клавиатуры / мыши на удаленный хост с клавиатурой / без мыши

    Как модули ядра и ядра SCSI обрабатываются иначе, чем другие модули ядра?

    Объединение расширения скобок и перенаправления вывода

    Как сохранить файл в ОЗУ

    Сравните все текстовые файлы в каталоге и сортируйте по сходству

    Как я могу использовать sed для определения определенного количества чисел, прежде чем он вставляет символ? ### – ### – ####

    Как узнать общий размер файлов определенного типа на моем жестком диске?

    Как получить версию моего драйвера nvidia?

    Linux и Unix - лучшая ОС в мире.