여러 파일의 패턴별로 라인 인쇄

여러 파일의 패턴별로 라인 인쇄

동일한 패턴의 파일이 여러 번 있습니다. 그것은 다음과 같습니다:

   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합니다 .timefilename

관련 정보