Chinaunix
标题:
awk 根据某列去重求助。
[打印本页]
作者:
啵啵油菜
时间:
2014-10-14 11:46
标题:
awk 根据某列去重求助。
需要根据文件中的某列进行取重,只取最后一条数据。求助啊 各位大神们
100001 I
100001 U
100001 D
200001 I
300000 U
200001 D
300000 D
400000 I
400000 U
需要得到的结果为
100001 D
200001 D
300000 D
400000 U
自己写了一个无法实现
作者:
这个冬天不冷
时间:
2014-10-14 11:58
[root@localhost ~]# awk '{a[$1]=$0}END{for(i in a)print a[i]}' file1 | sort
100001 D
200001 D
300000 D
400000 U
[root@localhost ~]# cat file1
100001 I
100001 U
100001 D
200001 I
300000 U
200001 D
300000 D
400000 I
400000 U
复制代码
作者:
jason680
时间:
2014-10-14 11:59
回复
1#
啵啵油菜
$ awk '{if(!a[$1])c[++t]=$1;a[$1]=$0}END{for(n=1;n<=t;n++)print a[c[n]]}' FILE
100001 D
200001 D
300000 D
400000 U
作者:
啵啵油菜
时间:
2014-10-14 13:47
求大神,给解释一下!
回复
3#
jason680
作者:
jason680
时间:
2014-10-14 14:00
回复
4#
啵啵油菜
方法:后来居上
use array in AWK and wirte over the value
refer more detail as below if you didn't know the AWK script
awk数组的学习心得
http://bbs.chinaunix.net/forum.p ... mp;fromuid=24785593
文本编辑的一点心得--awk篇
http://bbs.chinaunix.net/forum.p ... mp;fromuid=24785593
作者:
bulletmarquis
时间:
2014-10-14 14:41
回复
1#
啵啵油菜
不考验顺序的话简单一点,只按第一列取最后一行:
awk '{a[$1]=$0}END{for(i in a)print a[i]}' file
复制代码
作者:
jcdiy0601
时间:
2014-10-14 15:05
awk '{a[$1]=$0}END{len=asort(a);for(i=1;i<=len;i++)print a[i]}' test
100001 D
200001 D
300000 D
400000 U
复制代码
作者:
啵啵油菜
时间:
2014-10-14 15:20
谢谢了。
回复
6#
bulletmarquis
作者:
啵啵油菜
时间:
2014-10-14 15:20
谢谢
回复
7#
jcdiy0601
作者:
heyong45
时间:
2014-10-14 17:43
假设数据在filename中,
# sort -n -k 1 -s filename |tac|sort -n -k 1 -s -u
结果:
100001 D
200001 D
300000 D
400000 U
作者:
aingwen
时间:
2014-10-14 19:52
cat file|tac|awk '!a[$1]++'|tac
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2