我有以下问题:
我想从shell运行以下内容:
python test.py -f fname.csv -s 0.0 -c 0.0 > outS0.0C0.0.txt
问题在于我希望s和c为两个值循环遍历0.0到1.0的所有值,并将结果存储到上述格式的文件中。此外,如果可以,将输出文件分别移动到子文件夹,例如:in。\ S0.0 all out * files with s以outS0.0 *开头,依此类推。因此,结果将是各个文件的子文件夹集。
谢谢!
答案 0 :(得分:0)
这样的事情可以做到,没有任何工具(例如seq
),这些工具既没有由POSIX或bash的文档指定:
#!/bin/bash
# ^^^^- not /bin/sh; bash is required for C-style for loop syntax
for ((s=0; s<=10; s++)); do
for ((c=0; c<=10; c++)); do
s_str=$(awk -v i="$s" 'BEGIN { printf "%1.1f\n", i / 10 }')
c_str=$(awk -v i="$c" 'BEGIN { printf "%1.1f\n", i / 10 }')
python test.py -f fname.csv -s "$s_str" -c "$c_str" >"outS${s_str}C${c_str}.txt"
done
done
答案 1 :(得分:0)
Bash不能做浮点数学。但您可以使用awk创建数字。
#!/bin/sh
counter() {
awk 'BEGIN { for (i=0.0; i<=1; i+=0.1) { printf("%.1f\n",i) } }'
}
counter | while read s; do
mkdir -p S${s}
counter | while read c; do
python test.py -f fname.csv -s ${s} -c ${c} > outS${s}C${c}.txt
mv outS${s}C${c}.txt S${s}/
done
done
这为s
的每个值创建目录,然后为s
和c
的每个值运行python命令,将每个结果文件移动到目标目录中。我假设您有理由不将输出重定向到目标目录中已有的文件 - 否则,放弃mv
并执行此操作会更有意义:
python test.py -f fname.csv -s ${s} -c ${c} > S${s}/outS${s}C${c}.txt
如果您想要计数器的其他数字,可以很容易地为此shell函数添加选项,使其行为类似于seq
或jot
。
答案 2 :(得分:0)
#!/bin/sh
for ((s=0; s<=10; s++)); do
for ((c=0; c<=10; c++)); do
s_str=$(awk -v i="$s" 'BEGIN { printf "%1.1f\n", i / 10 }')
c_str=$(awk -v i="$c" 'BEGIN { printf "%1.1f\n", i / 10 }')
s_str=$(sed 's/,/./' <<< $s_str)
c_str=$(sed 's/,/./' <<< $c_str)
mkdir -p S${s_str}
echo "Doing case: S=${s_str}, C=${c_str}"
python test.py -f fname.csv -s "$s_str" -c "$c_str" > "outS${s_str}C${c_str}.txt"
mv outS${s_str}C${c_str}.txt S${s_str}/
done
done