N行ごとに新しい行を挿入しますか?


24

テキスト処理ツールを使用して、N行ごとに新しい行を挿入するにはどうすればよいですか?

N = 2の例:

入力:

sadf
asdf
yxcv
cxv
eqrt
asdf

出力:

sadf
asdf

yxcv
cxv

eqrt
asdf

回答:


28

awk

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

sedGNU拡張子):

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"

2
算術評価は条件として直接使用でき、[[ ]]テストする必要はありません:while read line; do echo "$line"; ((lines++ % 2)) && echo; done
マナトワーク

1
上記のコマンドsed '0~2 a\ 'は挿入された各改行にスペースを追加することに注意してください。あなたは、各行の後に改行を追加したい場合は、これらの同様の作業のいずれかのsed '0~1 a\ 'sed 'a\ 'または単にsed G
Acumenus


4
sed n\;G <infile

... は、あなたが必要とすることすべてです ...

例えば:

seq 6 | sed n\;G

出力:

1
2

3
4

5
6

... (および6の後にも空白が続きます) ...または...

seq 5 | sed n\;G

出力:

1
2

3
4

5

(5の後に空白はありません)

最後の行のケースで常に空白を省略する必要がある場合:

sed 'n;$!G' <infile


1

sed(GNU)

(GNU)を使用sed

sed '0~2G'

短い(N = 100の場合はugい):

sed 'n;G'

man sedは次のように説明しています:


first〜step line firstで始まるすべてのステップの行に一致します。たとえば、「sed -n 1〜2p」は入力ストリームのすべての奇数行を印刷し、アドレス2〜5は2行目から5行ごとに一致します。最初はゼロにすることができます。この場合、sedはstepと同等であるかのように動作します。(これは拡張機能です。)

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、おそらく:

awk '1 ; NR%2==0 {printf"\n"} '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.