如何检查文件中特定位置是否存在重复值

问题描述 投票:0回答:1

我的 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 编号,但输出没有文件名。我的计划是剪切,获取文件名以及发票编号,对输出进行唯一处理等。

linux file awk sed cut
1个回答
0
投票

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
    包含当前打开文件的名称。
© www.soinside.com 2019 - 2024. All rights reserved.