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

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

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 с множественным выражением для аргумента на месте
  • Вставить строку после сопоставления строки в sshd внутри pam.d
  • Добавление шаблона в каждое поле следующей строки
  • Замените в верхнем регистре на нижний регистр, кроме первой буквы каждого слова в определенной строке
  • Поиск и замена последовательности внутри скобки
  • Использование sed для выполнения замещений в файле
  • `pwd`, но опустить первые n каталогов
  • Добавьте строку под каждой строкой, соответствующей шаблону, только если она уже отсутствует
  • Использование команды Sed без определения переменных в сценарии оболочки
  • Как найти и заменить только в нескольких столбцах?
  • Напишите файл, имя которого соответствует строке в сценарии sed
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.