동일한 패턴의 파일이 여러 번 있습니다. 그것은 다음과 같습니다:
time
12:00
12:32
23:22
time
10:32
1:32
15:45
time
여러 파일의 예에서 패턴을 따르는 줄을 인쇄하고 싶습니다. 패턴을 따르는 줄의 수는 일정합니다. 질문의 첫 번째 부분을 얻을 수 있지만 awk '/time/ {x=NR+3;next}(NR<=x){print}' filename
각 청크를 다른 파일로 출력하는 방법을 모르겠습니다.
답변1
awk
예 를 들어 회선 리디렉션을 사용하십시오 .
$ awk '{print "hello" >> "/tmp/hello"; print "world" >> "/tmp/world"}'
에 정의된 파일에 대해 배열을 사용한 다음 BEGIN
다음과 같이 사용할 수 있습니다( awk
).
BEGIN{files[1]="first-file";
files[2]="second-file";
line=0}
/time/{line=NR}
{print >> files[NR-line]}
답변2
사용할 상황별 출력 옵션입니다 grep
. time
예를 들어 디렉토리의 모든 파일에서 각 항목 뒤에 세 줄을 추가 하려면 다음 을 수행하십시오.
grep -A3 'time' /path/to/files/*
grep
세 가지 컨텍스트 옵션이 있습니다. A
일치 후 행, B
일치 전 행, C
전체 컨텍스트(일치 전후 행)입니다. 출력을 더 분할하고 각 일치 항목이 4줄의 출력을 제공한다는 것을 알고 싶다면 grep
출력을 split -l4
.
답변3
새로운 GNU sed 사용하기
nl -bptime filename |
sed -n '/time/{N;N;N;s/\([0-9]\+\)[^\n]*\n/echo >\1.txt \"/;s/$/\"/e;}'
time
각 파일 뒤에 3줄을 인쇄합니다.N.txt에 나타나는 것에 해당 N
합니다 .time
filename