我的 Linux 服务器上的一个目录中有大约 2000 个文件。在每个文件中,位置 x-y 都有发票号码。检查这些文件是否存在重复项并打印文件名和值的最佳方法是什么?问题的简化版本 -
(base) jay:unq jayadevanmaymala$ cat a.txt
xyz1234
xyz1234
pqr4567
(base) jay:unq jayadevanmaymala$ cat ba.txt
lon9876
lon9876
lon4567
在上面的2个文件中,假设发票号码在位置4-8,我们在a.txt和b.txt中有重复的“4567”。如果同一个文件中有重复项 - 就像 a.txt 中有 1234 个一样,也没有问题。不需要打印它。我尝试剪切 inv 编号,但输出没有文件名。我的计划是剪切,获取文件名以及发票编号,对输出进行唯一处理等。
Perl 来救援!
perl -lne '
$in_file{substr $_, 3, 4}{$ARGV}=1;
END {
for $invoice (%in_file) {
print join "\t", $invoice, keys %{ $in_file{$invoice} }
if keys %{ $in_file{$invoice} } > 1;
}
}
' -- *txt
-n
逐行读取输入文件,为每个文件运行代码;-l
从输入中删除换行符并将其添加到 print
ed 行中;$ARGV
包含当前打开文件的名称。