创建具有多个变量的文件

创建具有多个变量的文件

我一直在尝试编写一个可执行脚本来创建包含多个变量的文件。

这里,x从 1 到 25 变化,z 从 5 到 7,步长为 0.1,而yw是常数。因此,对于的每个值x,必须有 21 个文件。我尝试了下面的方法,但我不明白这种嵌套的 for 循环应该如何工作。

mkdir dir
for ((i=1;i<=25;i++)); do
    printf 'x=%s\ny=4\n' "$i"
    for ((j=5;j<=7;j=j+0.1));do
        printf 'z=%s\nw=4\n' "$j" > dir/diles_$i_$j.txt
done

另外,我怎样才能使其成为可执行文件?我正在使用 Ubuntu。

答案1

这是您的解决方案:

#! /bin/bash

mkdir dir
for ((i=1;i<=25;i++)); do
    printf 'x=%s\ny=4\n' "$i"
    for ((j=50;j<=70;j++));do
        t=$(bc <<< "scale=1; $j/10")
        printf 'z=%s.1f\nw=4\n' "$t" > dir/diles_$i\_$t.txt
    done
done

解释 :

  • Bash 工作原理仅有的使用整数,因此您不能使用浮点数/小数进行循环(您会看到我下面只使用了 10 的除法)
  • 我们使用bc命令,将整数运算(例如除法)转换为浮点数;scale运算符显示我们想要的小数位数(这里,1 就足够了,不会有很多0,就像bc -ldo 一样)
  • 我们需要在文件名中添加一个\\,因为它没有考虑到i命名文件

另外,我指出您的第一个printf命令只是在终端中打印这样的结果,可能您会将它们添加到每个文件内(而不是终端显示),因此在这种情况下您必须使用下面的代码:

#! /bin/bash

mkdir dir
for ((i=1;i<=25;i++)); do
    for ((j=50;j<=70;j++));do
        t=$(bc <<< "scale=1; $j/10")    
        printf 'x=%s\ny=4\n' "$i" > dir/diles_$i\_$t.txt
        printf 'z=%s.1f\nw=4\n' "$t" >> dir/diles_$i\_$t.txt
    done
done

注意:>>操作符或第二个printf命令在这里很重要(第一个命令printf并不重要,只取决于你是否要处理以前的数据 - >>-,或者不 - >),因为如果你只使用一个>操作数,你将会删除所有以前的数据(所以第一个命令的输出printf将被删除)

资料来源:

相关内容