V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jseanj
V2EX  ›  程序员

请教一个awk的问题

  •  
  •   jseanj · 2013-10-24 15:47:29 +08:00 · 2952 次点击
    这是一个创建于 4049 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据文件如下:
    [id=123] key=a
    [id=456] key=b
    [id=789] key=c
    [id=123] value=aa
    [id=456] value=bb

    如果我想通过a来找到aa,应该如何做?

    ps:我的思路是找到a的那一行,取出“id=123”,然后作为接下来查找的变量,这样就能找到“[id=123] value=aa”这一行,但是不知道该怎样保存中间变量并用于接下来的查找。
    10 条回复    1970-01-01 08:00:00 +08:00
    merlin852
        1
    merlin852  
       2013-10-24 16:13:38 +08:00
    awk '/key=a/{a=$1;next}{if($1==a)print $2}'
    ry_wang
        2
    ry_wang  
       2013-10-24 16:17:18 +08:00
    awk '{ split($1,x,"="); gsub("]","",x[2]); ID=x[2]; ARRAY[ID]=ARRAY[ID]" "$2 } END {for(i in ARRAY) print i" "ARRAY[i]}' hello.txt

    ARRAY这个数组楼主随意处理了
    e1443367
        3
    e1443367  
       2013-10-24 16:58:14 +08:00
    复杂些的操作,更适合由表达能力更强的脚本语言做,比如python
    sykp241095
        4
    sykp241095  
       2013-10-24 17:29:26 +08:00
    cat datafile | sort -k1 | awk '$1==o{print v, $0}{o=$1;v=$0}'
    wang2191195
        5
    wang2191195  
       2013-10-24 17:37:27 +08:00
    其实你只要把awk脚本写在文件里面 你就会发现好处理多了
    bjtugun
        6
    bjtugun  
       2013-10-24 18:06:22 +08:00
    join命令,记得感谢我:)
    black0144
        7
    black0144  
       2013-10-24 18:19:06 +08:00
    @bjtugun Usage: join [OPTION]... FILE1 FILE2,得俩文件才行的。。
    rrfeng
        8
    rrfeng  
       2013-10-24 21:38:31 +08:00
    顺序很关键。
    plprapper
        9
    plprapper  
       2013-10-24 21:51:19 +08:00
    awkjoin(){
    sep=$1
    ia=$2
    ib=$3
    fap=$4
    fbp=$5
    all='$0'
    awk -F"${sep}" "NR==FNR{map[$ia]=$all;}NR>FNR{map[$ib]=map[$ib] \"\002\" $all;}END{for(line in
    map){print map[line]}}" $fap $fbp
    }

    酌情自己修正
    iptux
        10
    iptux  
       2013-10-24 22:57:36 +08:00
    数据文件为什么不是长成这个样子
    [id=123] a=aa
    [id=456] b=bb
    [id=789] c=cc
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5615 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:38 · PVG 15:38 · LAX 23:38 · JFK 02:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.