Chinaunix

标题: for循环如何逐行读取文件?(行中有空格) [打印本页]

作者: bulletmarquis    时间: 2014-09-19 16:35
标题: for循环如何逐行读取文件?(行中有空格)
文件里面如果有换行符,如可能用for循环逐行读取文件?
(用while读取的话,循环里面不能修改外部变量,所以想用for)
  1. seq 5|awk '$2=$1' >abc
复制代码

作者: 传奇库子    时间: 2014-09-19 16:40
回复 1# bulletmarquis


    循环里面不能修改外部变量    ===> 这是啥意思?
作者: bulletmarquis    时间: 2014-09-19 16:44
本帖最后由 bulletmarquis 于 2014-09-19 16:45 编辑

回复 2# 传奇库子
  1.     a=1
  2.     seq 5|while read num; do a=$num; done
  3.     echo $a
  4.     1

  5.     for num in $(seq 5); do a=$num; done
  6.     echo $a
  7.     5
复制代码

作者: reyleon    时间: 2014-09-19 17:04
你认为for是最好的解决方案是么? 你最原始的需求是神马?

http://bbs.chinaunix.net/thread-4118053-1-1.html
作者: reyleon    时间: 2014-09-19 17:07
回复 3# bulletmarquis
  1. [root@localhost ~]# a=1
  2. [root@localhost ~]#
  3. [root@localhost ~]#
  4. [root@localhost ~]# while read num ; do a=$num ; done < <(seq 5) ; echo $a        
  5. 5
  6. [root@localhost ~]# for num in $(seq 5) ; do a=$num ; done ; echo $a
  7. 5
  8. [root@localhost ~]#
复制代码
seq 5 | while ... 这样的方式是产生一个了shell子进程,自然子进程里的东西不能改变父进程的玩意儿
作者: bulletmarquis    时间: 2014-09-19 17:15
reyleon 发表于 2014-09-19 17:04
你认为for是最好的解决方案是么? 你最原始的需求是神马?

http://bbs.chinaunix.net/thread-4118053-1-1 ...



我是在重看shell十三问的时候,突然想到这个问题,主要想在技术上学习一下


单纯解决问题来说,通常如果文件中无空格,我用for来循环,否则用while或awk来解决
作者: yestreenstars    时间: 2014-09-19 17:55
处理文本,最好还是用awk和sed
作者: Herowinter    时间: 2014-09-19 18:48
回复 7# yestreenstars

据说for循环处理文本会有问题?
   
作者: yinyuemi    时间: 2014-09-19 19:48
回复 6# bulletmarquis


    重置IFS就可以了
作者: yestreenstars    时间: 2014-09-19 20:05
回复 8# Herowinter

不知道,我很少写shell脚本
   
作者: 关阴月飞    时间: 2014-09-19 20:13
回复 8# Herowinter


    能有什么问题?
作者: Herowinter    时间: 2014-09-19 21:13
回复 11# 关阴月飞

印象中不用sed awk的话,while比较正统,
遇到空格、空行等,for会有各种问题。
http://mywiki.wooledge.org/DontReadLinesWithFor
   




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