입력의 양을 처리 할 수 grep
을 가정하여 패턴 파일이 236,410 선이 가정,와 sed 방법 파이프 알 수없고, 출력 파일의 순서를 가정하는 것은 메모리가 문제이며, 귀하의 의견은 정적 문자열 대신 fgrep
으로 시도하는 경우 단지
grep -f 1.txt 2.txt | awk ... >file1
을하지 왜 중요하지 않다; 더 많은 양의 패턴을 처리 할 수 있습니다. 출력의 순서가 실제로 중요하다면 이와 같은 것은 훨씬 빨라야합니다. 입력에 따라
이
while read line; do
grep "$line" 2.txt | awk ...
done <1.txt >file1
, 당신이 공백을 처리하기 위해 read
에 몇 가지 옵션을 IFS
로 깨끗이 및/또는 추가 할 수 있습니다, 백 슬래시 등
만 입력의 236,410 첫 선을 원하는 경우에
, 당신 변경할 수 있습니다
head -n 236410 1.txt |
while read line ...
위의 방법 중 어느 것도 적합하지 않다면 다른 아이디어가 있습니다. 실제 처리에 awk
을 사용하고 있기 때문에 모든 처리를 awk
스크립트로 리팩토링하거나 sed
스크립트를 즉시 작성하여 그 결과를 awk
으로 전달할 수 있습니다. 이것은 조금 관여하고, 다시 패턴의 모양에 따라 달라집니다하지만,이 같은 당신에게 아이디어를 줄 것이다 :
sed 's%.*%/&/p%' 1.txt | less
은 당신이보고있는 것은 경기가 각각있을 경우 인쇄하는 sed
스크립트입니다 1.txt
의 패턴 중 하나입니다. (어떤 패턴에 슬래시가 포함되어 있으면 망가질 것입니다. 사소한 경우에는 다른 구분 기호를 사용하거나 패턴의 모든 슬래시를 이스케이프 처리하십시오.) 이제 파일에 저장하거나 (sed
에서 스크립트를 처리 할 수 있다면
sed 's%.*%/&/p%' 1.txt | sed -f - -n 2.txt | less
을 그리고 당신이 awk
에 전달할 것 인 것이다 : 표준 입력) sed
의 두 번째 인스턴스에 전달
sed 's%.*%/&/p%' 1.txt | sed -f - -n 2.txt | awk ... >file1
귀하의'head' /'tail' 콤보가 느린 것입니다. – tripleee
예, 왜 모든 시간 대신에 한 번에 한 줄씩 진행합니까? – Kevin
어떻게해야할까요? – user815408