日期:2014-05-16  浏览次数:20633 次

awk 的一个小问题
有一个文件如下:
con_name=[1]
auth=[0]
usr=[1]
pwd=[2]
url=[http://mirrors.sohu.com/apache/httpd-2.0.64.tar.bz2]
tmp_name=[httpd-2.0.64.tar(1).bz2]
status=[ok]
process=[0]
==============================
con_name=[2]
auth=[0]
usr=[1]
pwd=[2]
url=[http://centos.ustc.edu.cn/centos/6.3/isos/i386/CentOS-6.3-i386-bin-DVD1.iso]
tmp_name=[CentOS-6.3-i386-bin-DVD1.iso.tmp!]
status=[failed]
process=[0]
==============================


我想获得比如pwd的内容是多少?请教一下各位大侠有什么好办法。


本人有一个比较笨的办法,作为抛砖引玉:
大致思路:根据"=============================="看一下一共有几个这样的部分,然后计算一下每一部分是从第几行开始到第几行结束
cat myfile | awk 'NR>x && NR<y {print $1}' x=0 y=9 | grep p
wd |awk -F '=' '{printf $2}'

cat myfile | awk 'NR>x && NR<y {print $1}' x=10 y=19 | grep p
wd |awk -F '=' '{printf $2}'

------解决方案--------------------
或者:
awk 'BEGIN{RS="==============================\n"}{if(NR==2) print;}'
这样把换行也抑制掉。
------解决方案--------------------
cat myfile 
------解决方案--------------------
 grep 'pwd' 
------解决方案--------------------
 awk 'BEGIN{FS="="} {print $2}'