텍스트 처리 도구를 사용하여 N 줄마다 새 줄을 삽입하는 방법은 무엇입니까?
N = 2의 예 :
입력:
sadf
asdf
yxcv
cxv
eqrt
asdf
산출:
sadf
asdf
yxcv
cxv
eqrt
asdf
답변
로 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"
답변
사용 paste
paste -d'\n' - - /dev/null <file
답변
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
답변
또 다른 awk 맛 :
awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'
답변
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"} '