동일한 폴더의 여러 파일에 텍스트 파일의 여러 개정판이 있습니다.
내가 어떻게 할 수있는grep
폴더의 어떤 파일에도 동일한 텍스트가 포함된 중복된 줄이 나열되어 있지 않습니까?
답변1
어때요?
cat * | grep exampletext | sort -u
답변2
나는 사용한다:
grep -h test files* | puniq
puniq
예:perl -ne '$seen{$_}++ or print;'
비슷 sort -u
하지만 입력을 정렬하는 대신 런타임에 출력을 제공합니다.
파일 이름이 필요하고 각 파일에서 중복된 줄을 피하는 경우:
parallel --tag --lb 'grep string {} | puniq' ::: files*
파일 이름이 필요하고 어떤 파일에서도 중복된 줄을 원하지 않는 경우(파일 이름에는 TAB(\t)가 포함되어서는 안 됩니다):
parallel --tag --lb grep string {} ::: files* |
perl -ne '/^[^\t]+(.*)/ and $seen{$1}++ or print;'
답변3
아마도 이와 같은 것이 여러분의 상상에 가까울 수도 있습니다(gnu awk와 함께 사용):
cat file1
1
2
3
22
cat file11
1
2
3
8
9
cat file111
1
2
3
5
6
awk '{seen[$0]++;fname[$0]=FILENAME};END{for (k in seen) {if (seen[k]==1) print fname[k],":",k}}' file1*
file111 : 5
file111 : 6
file11 : 8
file11 : 9
file1 : 22
답변4
결과를 파이프하여 정렬하여 중복 항목을 필터링합니다.
grep -re pattern files and dirs ... | sort -ut: -k2
sort의 -t:
및 옵션을 -k2
사용하면 정렬 및 병합을 수행할 때 파일 이름을 무시합니다.
또는 파일 이름이 필요하지 않은 경우 다음을 수행하십시오.
grep -hre pattern files and dirs ... | sort -u