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을 수행하므로 개수가 올바르지 않게 됩니다. 이 경우 fileA는 먼저 uniq를 통해 실행되어 중복 항목을 제거한 다음 패턴에 사용됩니다.
새 파일로 필터링하거나 파일을 한 줄씩 처리하고 거기에서 실행할 수 있습니다.
while read keyword; do grep $keyword fileB.txt; done < fileA.txt | uniq -c