한 디렉터리에 여러 개의 파일이 있고 각 파일에서 중복된 줄을 찾아 파일 이름을 표시하여 중복된 파일을 식별해야 합니다.
나는 시도했다:for i in *.*;do sort $i | uniq -d ; done
중복된 줄이 표시되지만 파일 이름을 표시하고 중복된 파일을 식별하려면 어떻게 해야 합니까?
위 명령은 csv, .txt 파일에만 작동합니다. .xlsx 파일을 확인하는 다른 방법이 있습니까?
답변1
sed
- 에 이미 있는 접두사를 사용하여 각 줄에 접두사를 추가 할 수 있습니다$i
.
이렇게 하면 트릭을 수행할 수 있습니다.
for i in *.*; do sort $i|uniq -d |sed -e "s/^/$i:/"; done
더 쉽게 읽을 수 있도록 확장됨:
for i in *.*; do
sort $i | uniq -d | sed -e "s/^/$i:/";
done
- xlsx 파일은 실제로 파일의 zip 디렉터리이므로 xlsx의 압축을 풀고 .xlsx 아래의 내용을 볼 수 있습니다
file/xl/worksheets/sheet1.xml
. 그러나 이러한 파일은 xml 형식이므로 처리하기 전에 구문 분석이 필요합니다.
답변2
중복된 줄이 있는 파일을 찾는 옵션입니다.
빈 줄도 패턴과 일치할 수 있습니다.
awk 'D[$0]++ {print FILENAME; nextfile}' *.*
빈 행을 제외하려면 다음과 같은 다른 필터를 추가해야 합니다.
awk '/./ && D[$0]++ {print FILENAME; nextfile}' *.*
따라서 공백 문자가 있는 줄을 제외할 수 있습니다.
gawk '/\S/ && D[$0]++ {print FILENAME; nextfile}' *.*
다음은 귀하의 작업에 대한 답변입니다(공백 및 빈 줄 없음).
awk 'FNR == 1 {delete D;j=0} /[^[:blank:]]/ && (D[$0]++ == 1) {if(! j++ ) print "name: " FILENAME; print}' *.*