免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5243 | 回复: 12

一个从文件中提取特定信息的问题 [复制链接]

论坛徽章:
1
双鱼座
日期:2014-03-04 09:43:16
发表于 2011-04-06 22:33 |显示全部楼层
急用,所以来不及补习shell基础,在这还请各位多谅解。

目前有个文件内容如下(就是lvdisplay的结果):
  --- Logical volume ---
  LV Name                /dev/oramem_dg/lv_18
  VG Name                ora_dg
  LV UUID                88PCdv-kRke-iToO-v9Oo-Vdah-nPSR-0sz71h
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                21.00 GB
  Current LE             336
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
   
  --- Logical volume ---
  LV Name                /dev/oramem_dg/lv_19
  VG Name                ora_dg
  LV UUID                LpCj31-TinZ-Rbru-Pria-Pc2A-Q89T-OF12g6
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                21.00 GB
  Current LE             336
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
   
  --- Logical volume ---
  LV Name                /dev/oramem_dg/lv_20
  VG Name                ora_dg
  LV UUID                oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                21.00 GB
  Current LE             336
  Segments               1
  Allocation             inherit
  Read ahead sectors     0

我要如何才能得到如下格式的结果??
LV Name            VG Name            LV UUID            LV Write Access            LV Status            LV Size            Current LE
lv_18            ora_dg            oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb            read/write            NOT available            21.00 GB            336
lv_19            ora_dg            oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb            read/write            NOT available            21.00 GB            336
lv_20            ora_dg            oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb            read/write            NOT available            21.00 GB            336


在这先多谢各位了!~

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-04-06 23:11 |显示全部楼层
回复 1# dxwwp
  1. awk --re-interval  -vRS="--- Logical volume ---" -F'\t|\n' 'BEGIN{print "LV Name \t VG Name \t LV UUID \t LV Write Access \t LV Status \t LV Size \t Current LE"}
  2. NR>1{gsub(/ {2,}/,"\t");print gensub(/(.*)\/(.*)/,"\\2",1,$4),$7,$10,$13,$16,$19,$22}' OFS="\t" file
  3. LV Name          VG Name         LV UUID         LV Write Access         LV Status       LV Size         Current LE
  4. lv_18   ora_dg  88PCdv-kRke-iToO-v9Oo-Vdah-nPSR-0sz71h  read/write      NOT available   21.00 GB        336
  5. lv_19   ora_dg  LpCj31-TinZ-Rbru-Pria-Pc2A-Q89T-OF12g6  read/write      NOT available   21.00 GB        336
  6. lv_20   ora_dg  oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb  read/write      NOT available   21.00 GB        336
复制代码

论坛徽章:
0
发表于 2011-04-06 23:16 |显示全部楼层
  1. awk 'BEGIN{print "LV Name\tVG Name\tLV UUID\tLV Write access\tLV Status\tLV Size\tCurrent LE"}/-/{i=0;while(i<=7){getline;printf $3" "$4" ";i++}print ""}'
复制代码

论坛徽章:
0
发表于 2011-04-07 10:01 |显示全部楼层
网中淫 发表于 2011-04-06 23:16



    网中淫真是淫才啊

论坛徽章:
0
发表于 2011-04-07 10:59 |显示全部楼层
本帖最后由 南极雨 于 2011-04-07 11:04 编辑

[root@danoolive tardialog]# awk -v RS="--- Logical volume ---" 'BEGIN {print  "LV Name   VG Name   LV UUID   LV Write Ac
cess   LV Status   LV Size   Current LE"} {print $3"\t"$6"\t"$9"\t"$13"\t"$16""$17"\t"$20$21"\t"$24}' file | sed 's/.*\(
lv.*\)/\1/g'
LV Name   VG Name   LV UUID   LV Write Access   LV Status   LV Size   Current LE

lv_18   ora_dg  88PCdv-kRke-iToO-v9Oo-Vdah-nPSR-0sz71h  read/write      NOTavailable    21.00GB 336
lv_19   ora_dg  LpCj31-TinZ-Rbru-Pria-Pc2A-Q89T-OF12g6  read/write      NOTavailable    21.00GB 336
lv_20   ora_dg  oO9fe3-a11s-xHpz-0HIB-QqGq-kiEN-iyDTDb  read/write      NOTavailable    21.00GB 336


稍微又改了下

这个真复杂...光数域都数半天....

论坛徽章:
0
发表于 2011-04-07 11:00 |显示全部楼层
回复 1# dxwwp


晕....这么快就有这么多答案了阿....
还得再学习啊...

论坛徽章:
0
发表于 2011-04-07 11:15 |显示全部楼层
网中淫 发表于 2011-04-06 23:16


有点不太明白,想请教一下:
awk 'BEGIN{print "LV Name\tVG Name\tLV UUID\tLV Write access\tLV Status\tLV Size\tCurrent LE"} /-/{i=0;while(i<=7){getline;printf $3" "$4" ";i++}print ""}'

{i=0;while(i<=7){getline;printf $3" "$4" ";i++} 这段,i的值是不是成了getline的开关了?这样getline就会取每一行?
如果是这样的话,这个克是三段啊....怎么做到每段都去前七行的阿?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-04-07 12:40 |显示全部楼层
回复 8# 南极雨


    在一次文件处理中,getline取出来的行,用过之后,不会再放回去的

论坛徽章:
1
双鱼座
日期:2014-03-04 09:43:16
发表于 2011-04-07 14:10 |显示全部楼层
非常感谢#yinyuemi ,#网中淫和#南极雨 ,谢谢你们的帮助。

我得赶紧补习补习了,以后还望各位多多指教!

论坛徽章:
1
双鱼座
日期:2014-03-04 09:43:16
发表于 2011-04-07 14:23 |显示全部楼层
回复 6# 南极雨

刚刚验证了一把,好像lv size和Current LE没正确打印哦?
result.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP