
fileA.txt의 패턴과 함께 grep을 사용하고 fileB.tab에서 찾는 방법을 알아내려고 합니다. 내가 원하는 결과는 fileB.tab의 각 패턴 발생 횟수입니다.
나는 시도했다:
grep -f FileA.txt FileB.tab | wc -l
하지만 내 생각에는 fileA.tab 패턴이 나타나는 FileB.tab의 모든 줄이 나에게 반환되는 것 같습니다.
답변1
patterns
파일에 고정 문자열만 포함되어 있는 경우 gnu
설정에서 다음을 수행할 수 있습니다.
grep -oFf patterns infile | sort | uniq -c
내용이 정규식이라면 아마도 다음과 같을 것입니다.
sed -E 'h;s|/|\\&|g;x;s|[\&/]|\\&|g;H;x;s|(.*)\n(.*)|s/\1/\2/|' patterns \
| sed -f - <(grep -of patterns infile) | sort | uniq -c
즉 , 일치하는 항목을 실제 패턴으로 대체하기 위해 grep
이번에만 결과를 처리하는 것과 동일한 명령을 사용합니다 ( 의 내용을 기반으로 하는 다른 스크립트를 통해 ).sed
sed
patterns
답변2
uniq에는 발생 횟수를 계산하는 옵션이 있습니다.
grep -f fileA.txt fileB.txt | uniq -c
하지만 fileA에 중복 항목이 있으면 여러 번 grep하므로 개수가 정확하지 않습니다. 이 경우 먼저 uniq를 통해 fileA를 실행하여 중복 항목을 제거한 다음 이를 패턴에 사용합니다.
새 파일로 필터링하거나 파일을 한 줄씩 처리하고 그 파일에서 실행할 수 있습니다.
while read keyword; do grep $keyword fileB.txt; done < fileA.txt | uniq -c