我在Linux服务器上的目录中有大约2000个文件。在每个文件中,位置x-y都有发票编号。检查这些文件是否重复并打印文件名和值的最佳方法是什么?问题的简化版本-
$ cat a.txt
xyz1234
xyz1234
pqr4567
$ cat b.txt
lon9876
lon9876
lon4567
字符串
在上面的2个文件中,假设Invoice编号在4-8的位置,我们有重复的-“4567”在a.txt和b.txt中。如果我们在同一个文件中有重复的-因为我们在a.txt中有1234,这是好的。不需要打印。我试图剪切invy编号,但输出没有文件名。我的计划是剪切,得到文件名也沿着与发票号码,做一个唯一的输出等。
3条答案
按热度按时间v2g6jxz61#
Perl来救援!
字符串
-n
逐行读取输入文件,为每一行运行代码;-l
从输入中删除换行符,并将其添加到print
艾德化的行中;$ARGV
包含当前打开文件的名称;tcomlyy62#
作为替代,这里有一个Ruby来做这件事:
字符串
或者使用GNU awk(用于ENDFILE模式),您可以:
型
对于该示例,可以打印:
型
l7wslrjt3#
这可能对你有用(GNU sed,sort,uniq,.):
字符串
回显文件名。
使用xargs对每个文件应用sed脚本,将发票一分为二,并附加文件名。
使用sed将发票连接到文件名。
对结果进行排序,删除同一文件的重复项。
仅打印发票/文件名顺序中重复的发票。