사람이 어떻게 가능합니까?주어진 문자열에 대해 디렉터리에 있는 파일의 처음 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