2013-05-15 54 views
1

我正在写一些循环访问文本文件的ksh脚本,一次处理它一行。 我倾向于使用通过文件读取的方法

while read X1 X2 X3 X4 
do 
    <process line> 
done < $INFILE 

但同事谁没有使用

IFS=" 
" 
for LINE in `cat $INFILE` 
do 
    <process line> 
done 

类似的事情,他使用“切割”来分析,我自动获取变量,但除此之外,还有什么两种方法的优缺点?别人会怎么做?

谢谢。

+1

你绝对是在正确的轨道上。你的同事正在使用不需要的/额外的过程,尤其是调用'cut'。祝你好运! – shellter

回答

1

使用while read是更有效的存储器,并且还拆分对其中for LINE in符号上“单词”分割线。如果线条中有空白,则线条将被拆分。

所以,除非有很好的理由来使用$(cat $INFILE)符号(在bash,你可以使用$(<$INFILE)这是更有效),该while read是更好的选择。

+0

他设置$ IFS为,所以行不分割(请参阅我的第二个代码块的前两行) – rojomoke

+0

嗯......是的,我想是这样......但如果行需要分成四个字段,这不如使用'while read'时好。 –