我在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 ..
.. 任何帮助都是有价值的。 谢谢
答案 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