我想逐行读取文件并将第一个和第二个字段作为参数传递给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
提前致谢
答案 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