2014-04-17 39 views
2

我有多个行的文件,并要做到以下几点每行..虽然读取循环只处理第一行;

  1. 从一个awk输出设置三个变量。
  2. 对变量数据做一些事情(在我的例子中,回显它们)。

我的脚本成功地做了我想要的事情,但仅用于文件的第一行。

#!/bin/bash 

while read LINE; do 
set -- $(awk -F";" '{print $1, $2, $3}') 
var1=$1 
var2=$2 
var3=$3 

echo $1 
echo $2 
echo $3 

done < /path/file 

示例文件的数据:

NPK;20140325;272128;4579 
NPK;20140329;272826;4977 
NPK;20140320;271832;4248 
NPK;20140415;273213;6698 
NPK;20140406;272703;5708 
NPK;20140408;272204;5811 
NPK;20140324;271966;4465 
NPK;20140401;272507;5253 
NPK;20140403;272638;5487 

任何想法?

欢呼声中号

回答

3

awk声明没有明确的输入,所以它占用的stdin输入的其余部分 - 输入文件的其余线路。

你必须明确地传递$LINE变量的awk命令,你可以用下面的字符串做,即<<< $LINE

while read LINE; do 

    set -- $(awk -F";" '{print $1, $2, $3}' <<< $LINE) 
    var1=$1 
    var2=$2 
    var3=$3 

    echo $1 
    echo $2 
    echo $3 

done < /path/file 

但是,你可以通过让read大大简化你的循环做所有的解析:

while IFS=\; read var1 var2 var3 unused; do 

    echo $var1 
    echo $var2 
    echo $var3 

done < /path/file 
+0

谢谢,IFS工作的一种享受。 – user3543468