将两个文件与两列进行比较,并从shell脚本中的第二个文件中删除重复的行

将两个文件与两列进行比较,并从shell脚本中的第二个文件中删除重复的行,shell,Shell,请为我的问题找到以下示例: File1.txt: A|6359454|102951|FAR|976391300|12/02/2014 12:00:00 AM|2|12/02/2014 09:43:42 AM B|6353591|102952|HEN|42217A106|11/30/2014 12:00:00 AM|10|12/02/2014 12:25:16 AM A|6358494|102952|HEN|42217A106|12/02/2014 12:00:00 AM|10|12/02/201

请为我的问题找到以下示例:

File1.txt:

A|6359454|102951|FAR|976391300|12/02/2014 12:00:00 AM|2|12/02/2014 09:43:42 AM
B|6353591|102952|HEN|42217A106|11/30/2014 12:00:00 AM|10|12/02/2014 12:25:16 AM
A|6358494|102952|HEN|42217A106|12/02/2014 12:00:00 AM|10|12/02/2014 02:04:23 PM
A|6358496|102983|NAI|63633D104|12/02/2014 12:00:00 AM|6|12/02/2014 12:59:04 PM
B|6347496|102999|ACB|69360B107|11/28/2014 12:00:00 AM|1|12/02/2014 05:59:23 AM
A|6359347|102999|ACB|69360B107|12/02/2014 12:00:00 AM|2|12/02/2014 05:59:23 AM
C|6337344|103010|OAC|22002T108|11/25/2014 12:00:00 AM|10|12/01/2014 08:48:01 AM
File2.txt:

B|6359454|102951|FAR|976391300|12/02/2014 12:00:00 AM|2|12/02/2014 09:43:42 AM
B|6353591|102952|HEN|42217A106|11/30/2014 12:00:00 AM|10|12/02/2014 12:25:16 AM
A|6358494|102952|HEN|42217A106|12/02/2014 12:00:00 AM|10|12/02/2014 02:04:23 PM
C|6337344|103010|OAC|22002T108|11/25/2014 12:00:00 AM|10|12/01/2014 08:48:01 AM
A|6358496|102983|NAI|63633D104|12/02/2014 12:00:00 AM|6|12/02/2014 12:59:04 PM
B|6353613|103061|SAT|875465106|11/30/2014 12:00:00 AM|7|12/01/2014 07:22:18 PM
A|6355261|103061|SAT|875465106|12/01/2014 12:00:00 AM|7|12/01/2014 07:22:18 PM
B|6347496|102999|ACB|69360B107|11/28/2014 12:00:00 AM|1|12/02/2014 05:59:23 AM
A|6358506|103060|PQS|737464107|12/02/2014 12:00:00 AM|9|12/02/2014 04:24:43 AM
C|6337352|103065|OAI|681936100|11/25/2014 12:00:00 AM|6|11/26/2014 04:30:42 AM
C|6359347|102999|ACB|69360B107|12/02/2014 12:00:00 AM|2|12/02/2014 05:59:23 AM
期望输出:

File3.txt:

B|6353613|103061|SAT|875465106|11/30/2014 12:00:00 AM|7|12/01/2014 07:22:18 PM
A|6355261|103061|SAT|875465106|12/01/2014 12:00:00 AM|7|12/01/2014 07:22:18 PM
A|6358506|103060|PQS|737464107|12/02/2014 12:00:00 AM|9|12/02/2014 04:24:43 AM
C|6337352|103065|OAI|681936100|11/25/2014 12:00:00 AM|6|11/26/2014 04:30:42 AM
我想使用file1和file2的第4列和第6列进行比较,并删除file2中与file1匹配的整行内容。我还想将结果保存到第三个文件中

我试过了

awk 'FNR==NR{a[$4,$6];next};!(a[$4,$6])' file1.txt file2.txt > file3.txt
但输出是打印2个文件

提前感谢

一种方法:

perl -we ' my %seen;
           open my $fh1, "<", $ARGV[0];
           while (<$fh1>) {
               my @fields = split /[|]/, $_;
               ++$seen{"$fields[3]|$fields[5]"};
           }
           close $fh1;
           open my $fh2, "<", $ARGV[1];
           while (<$fh2>) {
               my @fields = split /[|]/, $_;
               print unless $seen{"$fields[3]|$fields[5]"};
           }
' File1.txt File2.txt > File3.txt
perl-we'my%seen;

打开我的$fh1,“我使用下面的命令并获得正确的输出

awk-F'|''NR==FNR{a[$4,$6]++;next}!(a[$4,$6])'file1.txt file2.txt>file3.txt


谢谢

那么您的代码有什么具体问题?您尝试了什么?我尝试了awk'FNR==NR{a[$4,$6];next};!(a[$4,$6])'file1.txt file2.txt>file3.txt,但输出为打印2 fileAlways如果您不想使用shell执行downvotesi想要执行的操作,则提供您所执行的操作scripting@user3796869:胡说八道。您发布的shell脚本是单个AWK命令;此shell脚本是单个Perl命令。如果您的脚本被算作“使用shell脚本”“,那么我的也是!”!,抱歉,如果我的评论伤害了你,我是新的shell脚本