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
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:
İle awk
:
awk ' {print;} NR % 2 == 0 { print ""; }' inputfile
İle sed
( GNU
uzantı):
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"
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
.
Başka bir garip lezzet:
awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'
(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.)
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.
İle awk
muhtemelen:
awk '1 ; NR%2==0 {printf"\n"} '
[[ ]]
testine:while read line; do echo "$line"; ((lines++ % 2)) && echo; done
.