2017-10-10 91 views
0

我的源文件是一个管道分隔一个猛砸如何删除与源达匹配的17管目标文件记录

QWER|RTYUI||12345678|09/07/1994|DFGHJK||PHOENIX|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N||1|1234567|QQ|4567890876 

,所以是我的目标文件(目标文件将在日期分区的文件夹)

QWER|RTYUI||12345678|09/07/1994|DFGHJK||PHOENIX|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N|QQQ|NOMATCH 

我应该能够挑选从源文件和循环记录通过所有文件的目标文件夹,从目标文件删除的记录,要注意的一点是,我只需要匹配数据高达17管在这两个文件中,因为在那之后数据不匹配。

BEFORE:

源文件

QWER|RTYUI||12345678|09/07/1994|DFGHJK||PHOENIX|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N||1|1234567|QQ|4567890876 

目的地文件

QWER|RTYUI||12345678|09/07/1994|DFGHJK||PHOENIX|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N|QQQ|NOMATCH 
QWER|RTYUI||98765432|09/07/1921|FGHJKJK||VBNM|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N|QQQ|NOMATCH 

AFTER:

目的地文件

QWER|RTYUI||98765432|09/07/1921|FGHJKJK||VBNM|AZ||85044|123456|QQ|4567890|10/06/2017|12/31/9999|N|QQQ|NOMATCH 

第一条记录应该从目标文件中删除,因为它将数据与源文件一直到第17条管道相匹配。

+0

能否请您让我们知道,如果你的文件有任何特定的格式?通过查看你的输出,我可以看到你不想要的第17列,而不是从第17个字段中删除所有字段?你能不能让我们知道。 – RavinderSingh13

+0

@ RavinderSingh13,更新了我的问题,请让我知道如果有帮助。 –

+0

一个迟到的欢迎来到该网站!查看[tour](https://stackoverflow.com/tour)和[how-to-ask页面](https://stackoverflow.com/help/how-to-ask)以获取更多关于提问的信息会吸引高质量的答案。你可以[编辑你的问题](https://stackoverflow.com/posts/46667203/edit)来包含更多信息。你试过什么了?一般来说,我会使用'awk'来完成这类任务。 – cxw

回答

0

以下awk应该能够帮助你。

awk -F"|" 'FNR==NR{a[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17];next} !(($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) in a)' Source_file Destination_file > temp_file && mv temp_file Destination_file 

现在也为解决方案添加非单行表单。

awk -F"|" ' 
FNR==NR{ 
    a[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17]; 
    next 
} 
!(($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) in a) 
' Source_file Destination_file > temp_file && mv temp_file Destination_file 
+0

用手写出所有17个字段看起来真的很单调...... – Aserre

2

壹切和一个grep的应该是足够

cut -d'|' -f1-17 source | grep -vFf- destination > new_destination 
+2

在这种情况下,一定要将'-F'加到'grep',否则输入行被解释为ERE模式,而不是固定字符串! (想象一条线包含'。*') – randomir

+0

@pacholik,这一切都没有发生,我的源文件和目标文件保持不变 –