我的目录下有几个文件,需要在每个文件中查找重复行并显示文件名以识别哪个文件有重复。
我试过: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}' *.*