Her N satırından sonra yeni bir satır ekle?


24

Her N satırından sonra yeni bir satır eklemek için metin işleme araçlarını nasıl kullanabilirim?

N = 2 için örnek:

GİRİŞ:

sadf
asdf
yxcv
cxv
eqrt
asdf

ÇIKTI:

sadf
asdf

yxcv
cxv

eqrt
asdf

Yanıtlar:


28

İle awk:

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

İle sed( GNUuzantı):

sed '0~2 a\\' inputfile

İle bash:

#!/bin/bash
lines=0
while IFS= read -r line
do
    printf '%s\n' "${line}"
    ((lines++ % 2)) && echo
done < "$1"

2
Aritmetik değerlendirme ile doğrudan bir durum olarak kullanılabilir, gerek [[ ]]testine: while read line; do echo "$line"; ((lines++ % 2)) && echo; done.
Manatwork

1
Yukarıda belirtilen komutun, sed '0~2 a\ 'eklenen her yeni satıra bir boşluk eklediğini unutmayın. Bu benzer şekilde işin herhangi her satırdan sonra bir yeni satır eklemek isterse: sed '0~1 a\ ', sed 'a\ ', ya da sadece sed G.
Acumenus


4
sed n\;G <infile

... tüm ihtiyacın olan ...

Örneğin:

seq 6 | sed n\;G

ÇIKTI:

1
2

3
4

5
6

... (ve boş bir de 6 izler) ... veya ...

seq 5 | sed n\;G

ÇIKTI:

1
2

3
4

5

(ve 5’i boş bırakmaz)

Bir boşluk her zaman son satırda kullanılmazsa:

sed 'n;$!G' <infile

2

Başka bir garip lezzet:

awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'

1
"Bu cevap, uzunluğu ve içeriği nedeniyle düşük kaliteli olarak işaretlendi." Kabul edeceğim ... ;-)
Hauke,

1

sed (GNU)

(GNU) ile sed:

sed '0~2G'

Kısa (N = 100 için çirkin):

sed 'n;G'

sed sed ~ şöyle açıklıyor:

ilk ~ adım
Her adımla, ilk satırdan başlayarak çizgiyi eşleştirin. Örneğin, `` sed -n 1 ~ 2p '' giriş akışındaki tüm tek numaralı satırları yazdırır ve 2 ~ 5 adresi ikinciden başlayarak her beşinci satırda eşleşir. ilk sıfır olabilir; Bu durumda sed, adıma eşitmiş gibi çalışır. (Bu bir uzantıdır.)

sed (diğer)

Diğer sed ile (Yeni satır say):

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

Veya daha taşınabilir olmak, olarak yazılmış (sed'in bazı sürümleri için yorumları kaldırın):

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

İle awkmuhtemelen:

awk '1 ; NR%2==0 {printf"\n"} '
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.