shell – 用cshell逐行读文件逐行处理

bash shell脚本:一次读取文件的一行,并输出
写法一: 
#!/bin/bash 
while read line 
do 
      echo $line     #这里可根据实际用途变化 
done < urfile 
写法二: 
#!/bin/bash 
cat urfile | while read line 
do 
    echo $line 
done 
注意:以上代码中urfile 为被读取的文件 

 

shell – 用cshell逐行读文件逐行处理
用cshell逐行读文件逐行处理
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.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

shell – while循环中使用read
while循环中使用read
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

如下SHELL
#!/bin/sh
cat file | while read line
do
echo "press any key"
read key
done
read key这条语句不起作用,到底怎么回事?file为一个文本文件

while read line
do
ehco "hello"
done < file

下面引用由yjlucky在 2002/10/09 09:07pm 发表的内容:
如下SHELL
#!/bin/sh
cat file | while read line
do

read key 当然也是从file里读了.

在循环中用read可以用以下方法!
for line in `cat file`
do
echo "press any key"
read key
done

不行吧,那样line的内容就是一个个单词而不是一行行了。

楼主的意思好象是读完一行,敲任意键再读下一行吧?

line 的值时file全文不是一行。

程序的设计思路不是太好,若一定要这要作,也可以作到:
cat file | while read line
do
echo $line
(echo "press any key:c"; exec </dev/tty; read key)
done

高!
麻烦exec </dev/tty是做什么的?

我想应该是定向下一步的操作(read key)从键盘读输入吧

binary 说得对。
当需要对键盘输入进行判断并处理时,如下的脚本更好一点:
cat file | while read line
do
echo $line
echo " :: Please input any key(s):c"
str4read=""
while true
do
chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
str4read=$str4read$chr4read
if [ "$chr4read" = "" ] ;then break; fi
done
echo " :: |$str4read|"
done

对Shell读文件的十二种方法在CentOS上做了一下测试:
当用line时,系统报错
./test.sh[3]: line: not found [No such file or directory]

先讲讲用read读文件
1. 将文件的内容通过管道(|)或重定向(<)的方式传给while
2. while中调用read将文件内容一行一行的读出来,并付值给read后跟随的变量,于是我们就可以使用这个变量了

例如读取文件/etc/hosts
管道的方式:

1
cat /etc/hosts|while read LINE
2
do
3
    echo $LINE
4
done
重定向的方式:
(1)利用重定向符<

1
while read LINE
2
do
3
    echo $LINE
4
done < /etc/hosts
(2)利用文件描述符(0~9)和重定向符<

1
exec 3<&0
2
exec 0</etc/hosts
3
while read LINE
4
do
5
    echo $LINE
6
done
7
exec 0<&3

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>