我目前有一个文本文件in.txt,其中包含列出输入名称和坐标的字符串。我需要拆分字符串以获得两个变量$ name和$ coor,然后在sh脚本test.sh中使用它。但我仍然无法得到预期的结果,我不确定我的语法是否错误,但这是我大致正在做的事情。
这是in.txt:
wa_qf 21.39,1.00
cd_lf 90.12,12.21
ab_od 1.22,3.45
zr_df 23.00,0.98
这是test.sh:
#!/bin/sh
while read input
directory = /users/maz/test/in.txt
name="$(cut -d' ' -f1 <"$directory")"
coor="$(cut -d' ' -f2 <"$directory")"
do
{
echo "The coordinate for input $name : ($coor)"
} > /users/maz/test/"$in.log"
done < "$directory"
文件in.log中的预期输出:
The coordinate for input wa_qf : (21.39,1.00)
The coordinate for input cd_lf : (90.12,12.21)
The coordinate for input ab_od : (1.22,3.45)
The coordinate for input zr_df : (23.00,0.98)
答案 0 :(得分:0)
当您尝试写入in.log时,您将覆盖该文件而不是附加该文件,因此每当您完成循环时,您将覆盖前一行。相反,做&gt;&gt; ...这是我的代码,我测试了它,它的工作原理......
请注意,我正在对文件名进行硬编码,如果您愿意,可以将它们放在变量中并使用变量......
#!/bin/bash
while read inline
do
name=`echo "$inline" | cut -d' ' -f1`
coor=`echo "$inline" | cut -d' ' -f2`
echo "The coordinate for input $name : ($coor)" >> ./in.log
done < ./in.txt
相反,如果您愿意,也可以捕捉文件并将输出传递给while循环。
#!/bin/bash
cat ./in.txt | while read inline
do
name=`echo "$inline" | cut -d' ' -f1`
coor=`echo "$inline" | cut -d' ' -f2`
echo "The coordinate for input $name : ($coor)" >> ./in.log
done
我的in.txt:
wa_qf 21.39,1.00
cd_lf 90.12,12.21
ab_od 1.22,3.45
zr_df 23.00,0.98
执行后我的in.log文件:
The coordinate for input wa_qf : (21.39,1.00)
The coordinate for input cd_lf : (90.12,12.21)
The coordinate for input ab_od : (1.22,3.45)
The coordinate for input zr_df : (23.00,0.98)