2015-07-10 89 views
1

我有2個文件new.csv & remove.txt。我正在使用AWK從生成的任何新csv文件中使用主文件刪除文件。這些文件是:使用Awk刪除重複文件

$ cat new.csv 

james,smith,bronx,2025555551 
adam,stephenson,brooklyn,2025555552 
anthony,jackson,queens,2025555553 
mary,young,astoria,2025555554 
marsha,peterson,madison,2025555555 
angie,huff,belk,2025555556 

則有:

$ cat remove.txt 

2025555550 
2025555553 
2025555555 
2025555557 
2025555558 
2025555559 

我的命令是:

$ awk -F, 'NR==FNR{remove[$4]++;next}!($4 in remove)' remove.txt new.csv > final.csv 

這給了我原來一樣的,就像這樣:

$ cat final.csv 

james,smith,bronx,2025555551 
adam,stephenson,brooklyn,2025555552 
anthony,jackson,queens,2025555553 
mary,young,astoria,2025555554 
marsha,peterson,madison,2025555555 
angie,huff,belk,2025555556 

我該如何得到它?

$ cat final.csv 

james,smith,bronx,2025555551 
adam,stephenson,brooklyn,2025555552 
mary,young,astoria,2025555554 
angie,huff,belk,2025555556 
+7

要刪除的列不是'remove.txt'中的'$ 4',您需要'remove [$ 1] ++'。 –

+0

@Etan Reisner - 這正是我所需要的。謝謝!因此,對於任何運行此命令的人來說,它是'$ awk -F,'NR == FNR {remove [$ 1] ++; next}!(刪除$ 4)'remove.txt new.csv> final.csv'。 –

+0

@Peaceful_Warrior您應該將解決方案作爲答案發布並接受它。 – Xebax

回答

0

Etan Reisner's解決方案:

awk -F, 'NR==FNR{remove[$1]++;next}!($4 in remove)' remove.txt new.csv 

這工作得很好。

對於任何關於AWK少知識淵博,更精細的和計劃的解決方案是:

awk 'BEGIN {while((getline var < "remove.txt")>0) {remove[var]=0}; FS=","} 
    {if(!($4 in remove)) {print $0}}' new.csv 

開始讀取輸入文件「new.csv」之前,BEGIN塊運行讀取整個密鑰文件「刪除。 txt「轉換爲關鍵字作爲刪除鍵的鍵。它還將字段分隔符設置爲「,」而不是默認空白。主程序一次讀取輸入文件一行,然後檢查第4個(最後一個)字段是否存在於任何刪除鍵中,否則打印。