免费注册 查看新帖 |

Chinaunix

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

一个比较考人的文件和字符串的shell命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-04 01:22 |只看该作者 |倒序浏览
看了前面的一篇关于从文件读取一行到变量中想到的一个问题。

在文件中a.file的内容如下:
/dev/device1           abc
/dev/device2           def

/dev/device3           abc

/dev/device11         dfe


这种情况下,中间有空行。我想从文件a.file中读到每一行的devicex,然后保存到变量中。使用循环的方式。每次读一行,读到之后,就将devicex的值(就是device(1-3))保存到变量var中,然后就是对var这个变量中的值devicex进行操作。

应该如何把devicex(1-3)取出来。并且在空行的时候跳过去,自动读下一行。并将取到的devicex保存到变量中。循环读取,一次读一行,跳过中间的空行。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-12-04 01:53 |只看该作者

一个比较考人的文件和字符串的shell命令


  1. n=1;sed -n '/\<device[0-9]\{1\}\>/p' file|while read i;do
  2.     var[$n]=$i
  3.     echo ${var[$n]}
  4.     ((n++))
  5. done
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-12-04 10:06 |只看该作者

一个比较考人的文件和字符串的shell命令

靠,
签名相片里的寂寞烈火----------真酷,真潇洒

论坛徽章:
0
4 [报告]
发表于 2004-12-04 12:38 |只看该作者

一个比较考人的文件和字符串的shell命令

来个AWK的,这里END的内容为打印数组,可自行替换需要的操作

  1. #!/bin/awk -f
  2. BEGIN {i=1}

  3. $0 !~ /^$/ {
  4.         match($0,/device[0-9]*/)
  5.         array[i]=substr($0,RSTART,RLENGTH)
  6.         i+=1
  7. }

  8. END{
  9. for (item in array)
  10.         print item,array[item]
  11. }
复制代码



TEST
  1. [root@bbhome test]# cat file
  2. /dev/device1 abc
  3. /dev/device2 def

  4. /dev/device3 abc

  5. /dev/device11 dfe
  6. [root@bbhome test]# temp file
  7. 4 device11
  8. 1 device1
  9. 2 device2
  10. 3 device3
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-12-04 14:05 |只看该作者

一个比较考人的文件和字符串的shell命令

原帖由 "ificanfly" 发表:
靠,
签名相片里的寂寞烈火----------真酷,真潇洒

呵呵,你的头像也很Cool      
P.S:bitbull的代码更cooooool  :em12:

论坛徽章:
0
6 [报告]
发表于 2004-12-04 17:26 |只看该作者

一个比较考人的文件和字符串的shell命令

原帖由 "寂寞烈火" 发表:

呵呵,你的头像也很Cool      
P.S:bitbull的代码更cooooool  :em12:


似曾相识的句式.........

论坛徽章:
0
7 [报告]
发表于 2004-12-04 18:37 |只看该作者

一个比较考人的文件和字符串的shell命令

再来个纯SHELL的,循环后数组赋值完毕,最后我用echo显示数组内容,可自行修改

  1. #!/bin/bash
  2. i=1
  3. while read line
  4. do
  5. line=$(echo $line|cut -d' ' -f1)
  6.         case $line in
  7.         /[A-Za-z]* ) array[i]=${line##*/};;
  8.         * ) continue;;
  9.         esac
  10. (( i+=1 ))
  11. done<$1

  12. echo ${array[*]}
复制代码



TEST

  1. [root@bbhome test]# cat devarray.file
  2. /dev/device1 abc
  3. /dev/device2 def

  4. /dev/device3 abc

  5. /dev/device11 dfe
  6. [root@bbhome test]# temp devarray.file
  7. device1 device2 device3 device11
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-12-04 19:19 |只看该作者

一个比较考人的文件和字符串的shell命令

[quote]原帖由 "bitbull"][/quote 发表:

楼主要到是device(1-3),而没有device11

论坛徽章:
0
9 [报告]
发表于 2004-12-04 21:58 |只看该作者

一个比较考人的文件和字符串的shell命令

晕,没看清,白忙了,楼主自己改下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP