您的位置:首页 > 文档 > Shell >
 文章分类 

用cshell逐行读文件逐行处理


创建:2005-10-26 00:49:43
作者:Unlinux
来自: http://www.Unlinux.com

用下面的方法:
foreach i ( `cat file.txt`)
echo $i
end

一般情况是可以的,但是如果有空格就不行了(1行被分成多行)。

不知各位大虾有何高见?

俺试了以下方法:
foreach i ('12 34' '34 56')
echo $i
end
结果是正确的:
12 34
34 56

但是俺稍微改了一下:
foreach i (`echo "a" | awk '{print "'''" $0 "'''" }' $fnm `)
echo $i
end
结果是:
'12
34'
'34
56'

请教各位大虾

用while read不用for 可取一行

这是bsh的一个逐行读取的例子,你可以参考一下。

j=0
len=`wc -l < $infile`
while test $j -lt $len;
do
a=`tail +$j $infile | head -1`
…$a holds line of data…
j=`expr $j + 1`
done

csh 这方面很弱,不好处理。我对 csh 不熟,也没有很好的办法,也许

1、你可以用 awk,对每一行的处理在 awk 环境中完成
awk "{print}" file.txt

2、如果不能或不想在 awk 中处理,试试这样,也可以在 csh 环境中完成

代码:
#!/bin/csh
set i = 0
set l = `awk 'END{print NR}' file.txt` # 总行数
while ( $i <= $l )
set line=`awk "{ if (NR == $i) print}" file.txt`
echo $line
... # 任何对 $line 的处理应用
@ i ++
end


祝好运,写 csh 比写 sh, ksh 要痛苦好几倍, icon_razz.gif



转载自:http://www.unlinux.com/doc/shell/20051026/135.html

评论】 【加入收藏夹】 【 】 【打印】 【关闭
 *  请尊重我们的劳动,转载请注明出自UnLinux.Com及作者名 * 

※ 相关链接
无相关信息
Copyright © 2005 UnLinux.Com All Rights Reserved