This topic created in 4669 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
 |
|
1
merlin852 Oct 24, 2013
awk '/key=a/{a=$1;next}{if($1==a)print $2}'
|
 |
|
2
ry_wang Oct 24, 2013
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这个数组楼主随意处理了
|
 |
|
3
daodao2015 Oct 24, 2013
复杂些的操作,更适合由表达能力更强的脚本语言做,比如python
|
 |
|
4
sykp241095 Oct 24, 2013
cat datafile | sort -k1 | awk '$1==o{print v, $0}{o=$1;v=$0}'
|
 |
|
5
wang2191195 Oct 24, 2013
其实你只要把awk脚本写在文件里面 你就会发现好处理多了
|
 |
|
6
bjtugun Oct 24, 2013
join命令,记得感谢我:)
|
 |
|
9
plprapper Oct 24, 2013
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 }
酌情自己修正
|
 |
|
10
iptux Oct 24, 2013
数据文件为什么不是长成这个样子 [id=123] a=aa [id=456] b=bb [id=789] c=cc
|