免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11785 | 回复: 16
打印 上一主题 下一主题

(求助)按照第一列唯一,输出最先出现的值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-04 10:39 |只看该作者 |倒序浏览
有以下一个文件
a ttpang  33
b jj  33
c dd  22
a aldfjlajd  22
d asdf  11
c aa  tt
希望输出:(也就是按照第一列,不重复的情况下输出次列值)
a ttpang  33
b jj  33
c dd  22
d asdf  11

我的想法是 使用数组保持 a[$1]=$0,来进行判断,但是比较容易实现的是后来者可以覆盖前来者,但是要保存最先出现的,不知道怎么办,求助大虾们

论坛徽章:
0
2 [报告]
发表于 2010-03-04 10:44 |只看该作者
awk '!a[$1]++' file

论坛徽章:
0
3 [报告]
发表于 2010-03-04 10:45 |只看该作者
回复 1# leestars881001


    cat a |awk '{a[$1]=$0}END{for(i in a ) print a}'  ,这里能实现是输出一个文件的最后一列唯一值;
    但是如何把文件倒着输入,这是个问题(*^__^*) ~

论坛徽章:
0
4 [报告]
发表于 2010-03-04 10:45 |只看该作者
awk '!a[$1]++' file 不能这样??

论坛徽章:
0
5 [报告]
发表于 2010-03-04 10:47 |只看该作者
回复 2# ywlscpl


    可以实现,能解析下原理么,好像太简洁了,没明白。。

论坛徽章:
0
6 [报告]
发表于 2010-03-04 10:51 |只看该作者
回复 5# leestars881001


    以前写的,贴过来
对于awk '!a[$3]++',需要了解3个知识点
1、awk数组知识,不说了
2、awk的基本命令格式 awk 'pattern{action}'
    省略action时,默认action是{print},如awk '1'就是awk '1{print}'
3、var++的形式:先读取var变量值,再对var值+1

以数据
1 2 3
1 2 3
1 2 4
1 2 5
为例,对于awk '!a[$3]++'
awk处理第一行时: 先读取a[$3]值再自增,a[$3]即a[3]值为空(0),即为awk '!0',即为awk '1',即为awk '1{print}'
awk处理第二行时: 先读取a[$3]值再自增,a[$3]即a[3]值为1,即为awk '!1',即为awk '0',即为awk '0{print}'
.............

最后实现的效果就是对于$3是第一次出现的行进行打印,也就是去除$3重复的行

论坛徽章:
0
7 [报告]
发表于 2010-03-04 11:01 |只看该作者
  1. awk '!($1 in a) {a[$1];print}' ufile
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-03-04 11:08 |只看该作者
回复 6# ywlscpl



    谢谢了哈,了解了,不过可能还需后续使用加深印象。
    a[$3]第一次赋值时候,会为0,这样!0,得出结果是1,默认1是真,会输出;
    后面再有出现值已经只可能是1,2,3..这之后了,这样!1,!2,!3也都是0.

论坛徽章:
0
9 [报告]
发表于 2010-03-04 12:04 |只看该作者
回复 1# leestars881001
  1. awk '
  2. {
  3. if($1 in array){ next; }
  4. print
  5. array[$1]=$0;
  6. }
  7. '
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-04-17 18:19 |只看该作者
回复 1# leestars881001
1 #! /bin/awk
  2 {a[$1]++;if(a[$1]==2)a[$1]=1
  3         else print $0
  4 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP