Как вывести номера строк, но сбросить счетчик строк на пустой строке?

Я не совсем понимаю вашу конкретную проблему, простой sedможет достичь того, что вы показываете:

$ sed 's/\ballow\b/not/g' afile
<Directory />
 words
 not
 bus

\bзащищает, чтобы мы заменяли только слова, такие как allow, строкой not. Если вы хотите удалить строки, содержащие строку allow, вы также можете использовать для этого sed:

$ sed '/\ballow\b/d' afile
<Directory />
 words
 bus
</Directory>
0
22.08.2020, 07:17
2 ответа

Если вы хотите использоватьawk:

$ cat nl.awk
{
   if ( $0 == "" ) {
      count = 0
      print
   } else
      print ++count, $0
}

Выходы:

$ awk -f nl.awk infile
1 this is the first
2 second line
3 not last line

1 fourth but first
2 second in list
3 seventh in file
4 seventh with nl
2
18.03.2021, 23:10

Использование awk:

awk '{ c=NF?++c:"" } {print c,$0}' file

Это значит:

  • Если есть какое-либо полеNF?(любой (не -пробел )символ ), увеличьте cна ++c.
  • Если нет полей (нет символов ), сделайте счетчик строк пустым.
  • Распечатать счетчик, за которым следует фактическая строкаprint c,$0

К сожалению, это короткое решение преобразует пустые строки в строки, содержащие пробел (или, фактически, в значение OFS ). Если это проблема, используйте это (аналогичное )решение:

awk 'NF{$0=++c" "$0}!NF{c=0}1' file

В этом решении нет причин заменять пустые строки на \:\:.

2
18.03.2021, 23:10

Теги

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