파일의 처음 50줄의 패턴을 Grep합니다.

파일의 처음 50줄의 패턴을 Grep합니다.

사람이 어떻게 가능합니까?주어진 문자열에 대해 디렉터리에 있는 파일의 처음 50줄을 검색합니다.? 나는 구체적으로 어떤 데이터베이스 테이블 파일(mysqldump에서)에 특정 필드가 정의되어 있는지 찾고 있지만 전체 파일을 grep하고 CREATE TABLE의 20-40행 이후에 수백 개의 INSERT 문을 계속 실행하고 싶지는 않습니다.

저 할 수 있어요Python 스크립트 작성각 파일의 처음 몇 줄을 반복하지만, 경험상 Python은 강력하지만 느립니다. 확인해야 할 *.sql 파일이 200개가 넘는데 앞으로 일반화할 수 있는 솔루션을 배우고 싶습니다.

답변1

awk(가정귀하의 구현은 이 nextfile진술을 뒷받침합니다) 이 작업을 훌륭하게 수행할 수 있습니다.

awk 'FNR > 50 { nextfile }; /foobar/ { print FILENAME ": " $0 }' ./*.sql

50개의 레코드가 처리되면 첫 번째 문이 다음 파일로 이동합니다. 두 번째 문은 파일 이름을 인쇄하고 foobar.

awk이 변형 이 없으면 작동 nextfile하지만 효율성은 떨어질 것 같습니다.

awk 'FNR <= 50 && /foobar/ { print FILENAME ": " $0 }' ./*.sql

답변2

이 솔루션은 효과가 있지만 투박하다고 생각됩니다. 문자열 "foobar"에 대해 처음 50줄을 검색합니다.

$ for I in *.sql ; do echo $I && head -n 50 $I | grep foobar ; done

답변3

GNU는 루프에서 sed작업을 수행 할 수도 있습니다.

for f in *.sql
do
    sed -e '1 F' -e '51 Q' -e '/pattern/! d' "$f"
done

답변4

grep을 파이핑하여 절반쯤 왔습니다.

head -50 filename | grep string

관련 정보