텍스트 처리 도구를 사용하여 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) }'