Вставить новую строку после каждый строки N?

В эти дни можно использовать подробные пути для монтирования определенного устройства.

Например:

mount /dev/disk/by-id/ata-ST31500341AS_9VS2AM04-part1 /some/dir
mount /dev/disk/by-id/usb-HTC_Android_Phone_SH0BTRX01208-0\:0 /some/dir
23
09.10.2018, 23:02
5 ответов

С awk:

awk ' {print;} NR % 2 == 0 { print ""; }' inputfile

С sed (GNU расширение):

sed '0~2 a\\' inputfile

С bash:

#!/bin/bash
lines=0
while IFS= read -r line
do
    printf '%s\n' "${line}"
    ((lines++ % 2)) && echo
done < "$1"
30
27.01.2020, 19:41
  • 1
    Арифметическая оценка может использоваться непосредственно в качестве условия, никакой потребности в [[ ]] протестировать: while read line; do echo "$line"; ((lines++ % 2)) && echo; done. –  manatwork 29.10.2011, 17:57
  • 2
    знать, что вышеупомянутая зарегистрированная команда sed '0~2 a\ ' добавляет пространство к каждой вставленной новой строке. Если Вы хотели добавить новую строку после того, как каждая строка, любой из них так же работает: sed '0~1 a\ ', sed 'a\ ', или просто sed G. –  Acumenus 07.11.2013, 21:20

Другой awk аромат:

awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'
2
27.01.2020, 19:41
  • 1
    "Этот ответ был отмечен как низкое качество из-за его длины и содержания". Я приму его... ;-) –  Hauke Laging 27.01.2015, 12:31

Использование пасты

 paste -d'\n' - - /dev/null <file
5
27.01.2020, 19:41
sed n\;G <infile

... это все, что вам нужно...

For example:

seq 6 | sed n\;G

OUTPUT:

1
2

3
4

5
6

... (и пробел следует за 6 также)... или....

seq 5 | sed n\;G

OUTPUT:

1
2

3
4

5

(и ни одна пустая строка не следует за 5)

Если пустая строка всегда должна быть опущена в последней строке:

sed 'n;$!G' <infile
4
27.01.2020, 19:41

СЭД (ГНУ)

С (ГНУ)sed:

sed '0~2G'

Короткий (Некрасивый для N=100):

sed 'n;G'

man sed объясняет ~как:

first ~ step
Match every step'th line starting with line first. For example, ``sed -n 1~2p'' will print all the odd-numbered lines in the input stream, and the address 2~5 will match every fifth line, starting with the second. first can be zero; in this case, sed operates as if it were equal to step. (This is an extension.)

sed (прочее)

С другими sed (Подсчет новых строк):

sed -e 'p;s/.*//;H;x;/\n\{2\}/{g;p};x;d'

Или, чтобы быть более переносимым, запишите как (удалить комментарии для некоторых версий sed):

sed -e '             # Start a sed script.
         p            # Whatever happens later, print the line.
         s/.*//       # Clean the pattern space.
         H            # Add **one** newline to hold space.
         x            # Get the hold space to examine it, now is empty.
         /\n\{2\}/{   # Test if there are 2 new lines counted.
             g        # Erase the newline count.
             p        # Print an additional new line.
           }          # End the test.
         x            # match the `x` done above.
         d            # don't print anything else. Re-start.
       '              # End sed script.

авк

С awk, вероятно:

awk '1 ; NR%2==0 {printf"\n"} '
5
27.01.2020, 19:41

Теги

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