我有一个包含多行的文件,并希望对每一行执行以下操作..
我的脚本成功完成了我想要的操作,但只适用于文件的第一行。
#!/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
有什么想法吗?
欢呼M答案 0 :(得分:3)
您的awk
语句没有明确的输入,因此它会消耗stdin
输入的其余部分 - 输入文件的其余行。
您必须明确地将$LINE
变量传递给awk
命令,您可以使用here-string进行操作,即<<< $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