在文件中查找重复记录并将其输出到另一个文件中

时间:2017-12-14 09:57:02

标签: unix awk

我在unix中有一个文件,有4列如下:

date1 2037 account1 5000    
date2 2037 account1 5003    
date3 2037 account1 5007    
date4 2037 account1 5009    
date5 2037 account2 5000    
date6 2037 account2 5003    
date7 2037 account2 5007    
date8 2037 account2 5009
..

我想查找具有所有account1值的所有5000, 5003, 5007, 5009(第3列上的值)。
如果可能的话,我想把它放在另一个文件中,如下所示:

date1 2037 account1 5000 date2 2037 account1 5003 ...

date4 2037 account2 5000 date9 2037 account2 5003 ..

.. 任何帮助都是有价值的。 谢谢

3 个答案:

答案 0 :(得分:0)

试一试这行:

awk '{a[$3]=a[$3]?a[$3]FS$NF:$0}END{for(x in a)print a[x]}' file

使用您的示例数据,输出:

date1 2037 account1 5000 5003 5007 5009
date5 2037 account2 5000 5003 5007 5009

答案 1 :(得分:0)

关注awk可能对您有帮助。

awk '!b[$3]++{c[++j]=$3} {a[$3]=a[$3]?a[$3] OFS $NF:$0} END{for(i=1;i<=j;i++){print a[c[i]]}}'   Input_file

输出如下。

date1 2037 account1 5000 5003 5007 5009
date5 2037 account2 5000 5003 5007 5009

答案 2 :(得分:0)

如果文件已按第3个字段(帐户)排序:

awk '{ printf "%s%s",(acc? ($3!=acc? ORS:FS) : ""),$0 }{ acc=$3 }END{ print }' file

输出:

date1 2037 account1 5000 date2 2037 account1 5003 date3 2037 account1 5007 date4 2037 account1 5009
date5 2037 account2 5000 date6 2037 account2 5003 date7 2037 account2 5007 date8 2037 account2 5009date8 2037 account2 5009
相关问题