免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5179 | 回复: 8
打印 上一主题 下一主题

shell中如何获取某一列的编号? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-29 14:16 |只看该作者 |倒序浏览
例如,
文本文件内容可能如下:
host      ip       state
hosta   x.x.x.x    online

也可能如下:
host      ip         alias       state
hosta   x.x.x.x     test        online

也就是说“state”所在列的序号是不确定的,可能在第3列,也可能在第4列,或者在其他列,但是该列的名称"state"是唯一的。

我如何打印出state这列的值?有没有办法根据“state”这个关键字获取“state”所在列的序号?

论坛徽章:
0
2 [报告]
发表于 2010-11-29 14:40 |只看该作者
回复 1# weiyonghz


   两种情况出现在同一个文件中吗?

论坛徽章:
0
3 [报告]
发表于 2010-11-29 14:42 |只看该作者
awk做个for循环for(i=1;i++;i<=NF){   if($i=="state") print i }

论坛徽章:
0
4 [报告]
发表于 2010-11-29 22:08 |只看该作者
awk 'NR==1{for (i=1;i<=NF;i++) if ($i=="state") n=i}{print $n}' file

论坛徽章:
0
5 [报告]
发表于 2010-11-29 22:10 |只看该作者
楼上的直接贴答案了  哈哈

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-11-29 23:18 |只看该作者
楼上的直接贴答案了  哈哈
yjwan 发表于 2010-11-29 22:10


第一种情况:
  1. # cat urfile
  2. host      ip       state
  3. hosta   x.x.x.x    online
  4. # awk '{for(i=1;i<=NF;i++) {if($i~/state/) num=i}{print $num}}' urfile
  5. state
  6. online
复制代码
第二种情况:
  1. # cat urfile
  2. host      ip         alias       state
  3. hosta   x.x.x.x     test        online
  4. # awk '{for(i=1;i<=NF;i++) {if($i~/state/) num=i}{print $num}}' urfile
  5. state
  6. online
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2010-11-30 09:14 |只看该作者
回复 1# weiyonghz


    就2行吗?
那nr==1判断,然后打印

论坛徽章:
0
8 [报告]
发表于 2010-11-30 09:50 |只看该作者
上面都用awk, 看来awk深入人心呀

i=0
while read line
do
   i=$((i+1))
   [[ "$line" =~ ".*state.*" ]] && echo $i
done <file

论坛徽章:
0
9 [报告]
发表于 2010-11-30 09:57 |只看该作者

  1. awk '/state/{for(i = 1;i <= NF;++i)if($i~/state/)flag=i}{print $flag}' file

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP