2017-10-10 16 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,這一切都沒有發生,我的源文件和目標文件保持不變 –