awk的學習:
今天去做數據準備的時候發現不知道怎麼準備,然後各種百度。
一、實現的功能:現有倆個文件a.txt(裏邊有倆列數據: bid,name), b.txt(好幾列數據:bid, pv)。其中a.txt有3800w的數據量,b.txt有1300w的數據量,而且a.txt的數據包含b.txt的數據,要將b.txt的數據在a.txt裏邊刪除掉,並且還要給b.txt的bid 對應加上name。
二、實現步驟:
-
獲取b.txt文件第一列數據生成新的b_bid.txt文件: awk -F ‘\t’ ‘{print $1}’ b.txt > b_bid.txt (-F指定命令符:具體 https://www.cnblogs.com/xudong-bupt/p/3721210.html)
-
獲取倆個不同文件的數據,將b_bid.txt文件的$1(第一列)和a.txt的文件$1進行比較是否一樣,一樣的話就講a.txt的$1,$2 輸出到一個新的文件new_b_bid.txt(bid, name 是指的b.txt重構之後的文件): awk ‘{if (NR==FNR) {arr1[$1]=$2}}NR>FNR{if($1 in arr1) {print $1,$2}}’ b_bid.txt a.txt > new_b_bid.txt(NR,FNR 具體:https://www.dwhd.org/20150614_005258.html)
-
將生成的new_b_bid.txt和a.txt進行對比(對比要注意倆文件的數據格式保持一致,特別列與列的空格); 先用命令 awk ‘print $0’ a.txt new_b_bid.txt > push_all_bid.txt 將倆文件進行合併(此命令是以追加的方式存進來的,就是先存放的是a.txt,再存放new_b_bid.txt)。 最後 排序 去掉重複的值(sort | uniq -u > push_b_bid.txt),生成最終想要的文件push_b_bid.txt。