如何设置文件中每个行存储的变量

时间:2014-06-02 11:33:46

标签: bash

我想逐行读取文件并将第一个和第二个字段作为参数传递给bash脚本,然后迭代到下一行并执行相同的操作。

我的文件是pwd.out:

/path/dir/name1/date name1
/path/dir/name2/date name2

我尝试了以下但没有成功:

while read line; do dir=`awk '{print $1}'`; name=`awk '{print $2}'`; echo "./myprogram $dir somethingHere $name"; done < pwd.out

输出:

./myprogram /path/dir/name1/date /path/dir/name2/date somethingHere

我认为以某种方式$ dir从所有行获取值并且$ name未被设置。

我想要的是:

./myprogram /path/dir/name1/date somethingHere name1
./myprogram /path/dir/name2/date somethingHere name2

提前致谢

2 个答案:

答案 0 :(得分:2)

你不需要awk。只需read变量按顺序排列,例如:

while read dir name
do
   ./myprogram $dir somethingHere $name
done < pwd.out

测试

请参阅一个示例,其中我只使用您的给定文件回显dir=$dir, name=$name

$ while read dir name; do echo "dir=$dir, name=$name"; done < pwd.out
dir=/path/dir/name1/date, name=name1
dir=/path/dir/name2/date, name=name2

您的awk命令无效,因为您没有给它任何输入。

如果你这样做,它可以工作,虽然没有必要使用像awk这样的外部命令和bash可以完美处理的东西,如上所示。

while read line
do
   dir=$(awk '{print $1}' <<< "$line")
   name=$(awk '{print $2}' <<< "$line")
   echo "./myprogram $dir somethingHere $name"
done < pwd.out

答案 1 :(得分:0)

while read dir name; do
    echo "dir=$dir name=$name"
done < pwd.out