从文本文件中获取变量并在sh脚本中使用时出错

时间:2017-12-07 03:25:57

标签: sh

我目前有一个文本文件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)

1 个答案:

答案 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)