• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jseanj
V2EX  ›  程序员

请教一个awk的问题

  •  
  •   jseanj · Oct 24, 2013 · 3722 views
    This topic created in 4760 days ago, the information mentioned may be changed or developed.
    数据文件如下:
    [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 replies  •  1970-01-01 08:00:00 +08:00
    merlin852
    merlin852
    Oct 24, 2013
    1
    awk '/key=a/{a=$1;next}{if($1==a)print $2}'
    ry_wang
    ry_wang
    Oct 24, 2013
    2
    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这个数组楼主随意处理了
    daodao2015
    daodao2015
    Oct 24, 2013
    3
    复杂些的操作,更适合由表达能力更强的脚本语言做,比如python
    sykp241095
    sykp241095
    Oct 24, 2013
    4
    cat datafile | sort -k1 | awk '$1==o{print v, $0}{o=$1;v=$0}'
    wang2191195
    wang2191195
    Oct 24, 2013
    5
    其实你只要把awk脚本写在文件里面 你就会发现好处理多了
    bjtugun
    bjtugun
    Oct 24, 2013
    6
    join命令,记得感谢我:)
    black0144
    black0144
    Oct 24, 2013
    7
    @bjtugun Usage: join [OPTION]... FILE1 FILE2,得俩文件才行的。。
    rrfeng
    rrfeng
    Oct 24, 2013
    8
    顺序很关键。
    plprapper
    plprapper
    Oct 24, 2013
    9
    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
    iptux
    Oct 24, 2013
    10
    数据文件为什么不是长成这个样子
    [id=123] a=aa
    [id=456] b=bb
    [id=789] c=cc
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1728 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:00 · PVG 08:00 · LAX 16:00 · JFK 19:00
    ♥ Do have faith in what you're doing.