LInux 命令awk学习

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。

二、实现步骤:

  1. 获取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)

  2. 获取俩个不同文件的数据,将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)

  3. 将生成的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。

  4. 友情链接awk:https://www.dwhd.org/20150614_005258.html

猜你喜欢

转载自blog.csdn.net/IT__LiangChen/article/details/86682158