Извлеките отмеченные строки из текстового файла с помощью Bash

Это - ошибка с Xorg, и фиксация существует.

1
13.04.2017, 15:36
2 ответа

Как первая идея, awk:

awk -vRS='#[^#]+#' 'RT{gsub(/#/,"",RT);p[RT]=1}END{for(i in p)print i}' the_file

Но это решение может зависеть от других операций, которые необходимо выполнить.


Объяснения согласно просьбе в комментарии.

awk -vRS='#[^#]+#' '   # use /#[^#]+#/ as record separator
RT {   # record terminator not empty?
  gsub(/#/,"",RT)    # remove the # parameter delimiter markup
  p[RT]=1   # store it as key in array p
}
END {   # end of input?
  for (i in p) print i   # loop through array p and print each key
}' the_file

Основная часть является использованием RT (запишите разделитель), встроенная переменная:

   RT          The record terminator.  Gawk sets RT to the input text that
               matched the character or regular expression specified by
               RS.
5
27.01.2020, 23:17
  • 1
    Это удивительно! Спасибо - какие-либо ссылки, которые объясняют, как это работает? –  Rich 11.06.2012, 14:22
  • 2
    Единственное awk документация, которую я раньше читал, является Руководством пользователя Awk GNU. –  manatwork 11.06.2012, 15:08
  • 3
    Просто между прочим, просто p[RT] достаточно должен создать список ключей, т.е., он не требует =1, поскольку это никогда не должно получать доступ ни к каким значениям (это на самом деле быстрее, также)... и также между прочим, очень хорошие +1. –  Peter.O 11.06.2012, 23:33
  • 4
    @Peter. O, Вы правы. При присвоении значения было только отражением. –  manatwork 12.06.2012, 08:54

Как первая идея, awk:

awk -vRS='#[^#]+#' 'RT{gsub(/#/,"",RT);p[RT]=1}END{for(i in p)print i}' the_file

Но это решение может зависеть от других операций, которые необходимо выполнить.


Объяснения согласно просьбе в комментарии.

awk -vRS='#[^#]+#' '   # use /#[^#]+#/ as record separator
RT {   # record terminator not empty?
  gsub(/#/,"",RT)    # remove the # parameter delimiter markup
  p[RT]=1   # store it as key in array p
}
END {   # end of input?
  for (i in p) print i   # loop through array p and print each key
}' the_file

Основная часть является использованием RT (запишите разделитель), встроенная переменная:

   RT          The record terminator.  Gawk sets RT to the input text that
               matched the character or regular expression specified by
               RS.
5
27.01.2020, 23:17

Теги

Похожие вопросы