Chinaunix

标题: (求助)按照第一列唯一,输出最先出现的值 [打印本页]

作者: leestars881001    时间: 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,来进行判断,但是比较容易实现的是后来者可以覆盖前来者,但是要保存最先出现的,不知道怎么办,求助大虾们
作者: ywlscpl    时间: 2010-03-04 10:44
awk '!a[$1]++' file
作者: leestars881001    时间: 2010-03-04 10:45
回复 1# leestars881001


    cat a |awk '{a[$1]=$0}END{for(i in a ) print a}'  ,这里能实现是输出一个文件的最后一列唯一值;
    但是如何把文件倒着输入,这是个问题(*^__^*) ~
作者: fllintel    时间: 2010-03-04 10:45
awk '!a[$1]++' file 不能这样??
作者: leestars881001    时间: 2010-03-04 10:47
回复 2# ywlscpl


    可以实现,能解析下原理么,好像太简洁了,没明白。。
作者: ywlscpl    时间: 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重复的行

作者: jianasonic    时间: 2010-03-04 11:01
  1. awk '!($1 in a) {a[$1];print}' ufile
复制代码

作者: leestars881001    时间: 2010-03-04 11:08
回复 6# ywlscpl



    谢谢了哈,了解了,不过可能还需后续使用加深印象。
    a[$3]第一次赋值时候,会为0,这样!0,得出结果是1,默认1是真,会输出;
    后面再有出现值已经只可能是1,2,3..这之后了,这样!1,!2,!3也都是0.
作者: Perl_Er    时间: 2010-03-04 12:04
回复 1# leestars881001
  1. awk '
  2. {
  3. if($1 in array){ next; }
  4. print
  5. array[$1]=$0;
  6. }
  7. '
复制代码

作者: 李寻欢92    时间: 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 }
作者: blackold    时间: 2010-04-17 19:08
本帖最后由 blackold 于 2010-04-17 23:51 编辑

try
sort -uk1,1 urfile

作者: wild_li    时间: 2010-06-08 15:02
try
blackold 发表于 2010-04-17 19:08



    uk1,1 这两个1,1是怎么用的?
作者: blackold    时间: 2010-06-08 15:07
回复 12# wild_li


    对第1字段排序
作者: wild_li    时间: 2010-06-08 15:14
回复  wild_li


    对第1字段排序
blackold 发表于 2010-06-08 15:07



    那如果以第二字段排序应该怎么写,另,sort能定义分界符么?
作者: Shell_HAT    时间: 2010-06-08 15:14
回复 12# wild_li


再复习一遍《十二篇》吧:
http://bbs.chinaunix.net/thread-457730-1-1.html
作者: wild_li    时间: 2010-06-08 15:17
回复  wild_li


再复习一遍《十二篇》吧:
Shell_HAT 发表于 2010-06-08 15:14



    谢谢,学习中.
作者: heqingbluesky    时间: 2010-06-10 16:36
终于弄懂-key在sort中的用法。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2