sed(GNU)

sed(GNU)

텍스트 처리 도구를 사용하여 N 줄마다 새 줄을 삽입하려면 어떻게 해야 합니까?

N=2의 예:

입력하다:

sadf
asdf
yxcv
cxv
eqrt
asdf

산출:

sadf
asdf

yxcv
cxv

eqrt
asdf

답변1

그리고 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

sed(GNU)

(GNU) 사용 sed:

sed '0~2G'

짧음(N=100에는 적합하지 않음):

sed 'n;G'

man sed는 ~를 다음과 같이 해석합니다.

first ~ step은
첫 번째 줄부터 시작하는 모든 첫 번째 단계와 일치합니다. 예를 들어, "sed -n 1~2p"는 입력 스트림의 모든 홀수 행을 인쇄하고 주소 2~5는 두 번째 행부터 시작하여 매 5번째 행과 일치합니다. 첫 번째 값은 0일 수 있습니다. 이 경우 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 '1 ; NR%2==0 {printf"\n"} '

답변3

사용paste

 paste -d'\n' - - /dev/null <file

답변4

또 다른 awk 스타일:

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

관련 정보