Chinaunix

标题: 一个比较考人的文件和字符串的shell命令 [打印本页]

作者: foxwhilter    时间: 2004-12-04 01:22
标题: 一个比较考人的文件和字符串的shell命令
看了前面的一篇关于从文件读取一行到变量中想到的一个问题。

在文件中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保存到变量中。循环读取,一次读一行,跳过中间的空行。
作者: 寂寞烈火    时间: 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
复制代码

作者: ificanfly    时间: 2004-12-04 10:06
标题: 一个比较考人的文件和字符串的shell命令
靠,
签名相片里的寂寞烈火----------真酷,真潇洒
作者: bitbull    时间: 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
复制代码

作者: 寂寞烈火    时间: 2004-12-04 14:05
标题: 一个比较考人的文件和字符串的shell命令
原帖由 "ificanfly" 发表:
靠,
签名相片里的寂寞烈火----------真酷,真潇洒

呵呵,你的头像也很Cool      
P.S:bitbull的代码更cooooool  :em12:
作者: bitbull    时间: 2004-12-04 17:26
标题: 一个比较考人的文件和字符串的shell命令
原帖由 "寂寞烈火" 发表:

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


似曾相识的句式.........
作者: bitbull    时间: 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
复制代码

作者: 寂寞烈火    时间: 2004-12-04 19:19
标题: 一个比较考人的文件和字符串的shell命令
[quote]原帖由 "bitbull"][/quote 发表:

楼主要到是device(1-3),而没有device11
作者: bitbull    时间: 2004-12-04 21:58
标题: 一个比较考人的文件和字符串的shell命令
晕,没看清,白忙了,楼主自己改下吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2