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

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"

2
산술 평가는 [[ ]]테스트 할 필요없이 조건으로 직접 사용할 수 있습니다 while read line; do echo "$line"; ((lines++ % 2)) && echo; done.
manatwork

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

2

또 다른 awk 맛 :

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

1
"이 답변은 길이와 내용으로 인해 품질이 낮은 것으로 표시되었습니다." 나는 그것을 받아 들일 것이다 ... ;-)
Hauke ​​Laging

1

sed (GNU)

(GNU)로 sed:

sed '0~2G'

짧음 (N = 100의 경우 추한) :

sed 'n;G'

남자 sed 설명 ~

첫 단계 ~
줄부터 시작하여 모든 줄을 일치시킵니다. 예를 들어,``sed -n 1 ~ 2p ''는 입력 스트림의 모든 홀수 라인을 인쇄하고 주소 2 ~ 5는 두 번째 라인부터 다섯 번째 라인마다 일치합니다. 첫 번째는 0이 될 수 있습니다. 이 경우 sed는 마치 단계와 동일한 것처럼 작동합니다. (이것은 확장입니다.)

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.

어 wk

으로 awk아마도 :

awk '1 ; NR%2==0 {printf"\n"} '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.