+ -
当前位置:首页 → 问答吧 → 循环内有awk语句只执行一次

循环内有awk语句只执行一次

时间:2011-08-22

来源:互联网

Perl code

#!/bin/sh

i=0

while read LINE
do 
    echo "i= $i"
    echo $LINE
done < my.file



以上代码会将my.file文件内容逐行输出。改成以下代码后,循环就只执行一次

Perl code

#!/bin/sh

i=0

while read LINE
do 
    echo "i= $i"
    echo $LINE
    echo "region 1 is: `awk '{print $1}'`   #增加这一句,本意想输出第一列
done < my.file



结果显示 i=0,增加的语句将整个文本的第一列输出而不是第一行的第一列。

请问,这是为什么?是因为 awk 语句处理的时候会读取整个文本吗?

作者: liang0356   发布时间: 2011-08-22

echo "region 1 is: `echo $LINE | awk '{print $1}'`"

作者: zmlovelx   发布时间: 2011-08-22

什么意思?能解释具体原因吗?

作者: liang0356   发布时间: 2011-08-22

第一个shell,你的i没涨过。 let $i=$i+1

第二个shell,依旧有第一个毛病,另外,awk没有标准输入。 

echo $LINE | awk '{print "region 1 is:"$1}'

作者: qq120848369   发布时间: 2011-08-22

C/C++ code
#!/bin/sh

i=0

while read line
do
    echo "i=$i"
    echo $line
    let i=$i+1
done < my.file


while read line
do
    echo "i=$i"
    echo $line
    echo $line | awk '{print "region 1 is:"$1}'
    let i=$i+1
done < my.file

作者: qq120848369   发布时间: 2011-08-22

打漏了一句 ((i++))。不过上楼已经改过来了。

如果把
echo $line | awk '{print "region 1 is:"$1}'

改成

awk '{print "region 1 is:"$1}'

循环就只执行一次了。这是为什么。

作者: liang0356   发布时间: 2011-08-22