shell文件读取行的问题,着急上火啊。。。。

文件netinfo,里面存储的内容如下
0 SUCCES - 成功 ---- 202.100.93.98
0 SUCCES - 成功 ---- 61.160.226.168
0 SUCCES - 成功 ---- 221.206.130.32
0 SUCCES - 成功 ---- 221.206.130.33
2 SUCCES - 成功 ---- 123.235.39.123
0 SUCCES - 成功 ---- 221.192.150.92
0 SUCCES - 成功 ---- 222.222.198.93
1 SUCCES - 成功 ---- 61.158.248.62
0 SUCCES - 成功 ---- 61.191.62.217

我现在是要读取每行的第一个字符,如果不是为0,就输出该行,用for写不行,for写的话,它默认是空格为记录分隔符了,太扯淡了:

  for ERR_INFO in `cat /tmp/netinfo`
  do
        ERROR_INFO=`echo "$ERR_INFO"|awk '{print $1}'`
         
       if [ $ERROR_INFO -ne 0 ]
        then
                 echo "$ERR_INFO" >> /tmp/testresult
         fi
done

我这边测试,只能用while read line写才能准确的读取每行。问题在于,while这个玩意执行起来就像老牛拉磨似的,忒花时间了!

请教为什么for循环不行,是不是因为有中文的原因??

作者: zhnghaijin   发布时间: 2011-05-29

顶起啊。。。来淫给个解答啊

作者: zhnghaijin   发布时间: 2011-05-29

回复 zhnghaijin
  1. OLDIFS=$IFS
  2. IFS=$'\n'
  3. 'for code'
  4. IFS=$OLDIFS
复制代码

作者: yinyuemi   发布时间: 2011-05-29

回复 yinyuemi


    额~我看不懂这个是什么方式的处理???

作者: zhnghaijin   发布时间: 2011-05-29

  1. awk '$1!=0' file
  2. 2 SUCCES - 成功 ---- 123.235.39.123
  3. 1 SUCCES - 成功 ---- 61.158.248.62
复制代码

作者: zooyo   发布时间: 2011-05-29

回复 zooyo


    太刁了!!有时候我们总是把问题想的太复杂。高人擅用的就是简洁的思维,感慨的一次学习啊。。。

作者: zhnghaijin   发布时间: 2011-05-29

回复 zhnghaijin


    先设定新的IFS,执行完你的for code,然后再还原IFS

作者: yinyuemi   发布时间: 2011-05-29

回复 yinyuemi


    学习了。。。不过我很困惑的是,为什么直接for有问题呢。是因为中文的原因么?

作者: zhnghaijin   发布时间: 2011-05-29

不是,你本来的IFS是空格 TAB 和换行做为断句,你这一行文件中有空格,它就默认给断开了,明白不,只有设置IFS为换行才可以正常读取。这个问题经常都会在shell中遇到。

作者: zooyo   发布时间: 2011-05-29

回复 zhnghaijin

  运行下这个看下:
  1. for ERR_INFO in `cat /tmp/netinfo`
  2.   do
  3. echo $ERR_INFO
  4. done
复制代码

作者: yinyuemi   发布时间: 2011-05-29