我正在尝试使用嵌套for循环来创建文件。我有三个数组如下:
a=( 1000 2000 3000 )
b=( 10515 7515 4515 )
c=( 10 20 30 40 )
使用这些数组将指定我的for循环将搜索的文件(用于从预先存在的文件复制数据并将其复制到新创建的文件中)。
for tom in "${tom[@]}"
do
for dick in "${dick[@]}"
do
for harry in "${harry[@]}"
do
FILENAME="this_is_file_${tom}_${dick}_c0.out"
NEWFILE="this_is_newfile_${tom}_${dick}_${harry}.out"
cat $FILENAME >> $NEWFILE
awk 'NR==n{$3=a}1' n="${x}" a="${harry}" $NEWFILE &> tmp && mv tmp $NEWFILE
mv $NEWFILE NewFiles
done
done
done
done
(我已经定义了x ="字符串")。到目前为止,我的代码在for循环经历一次迭代时生成所有文件HOWEVER,下一循环返回到最后一个数组值4515开始并跳过第一个10515值。我得到40个正确数字的文件,但是当tom的数组值为2000和3000时,dick的数组仅使用数组值7515和4515生成文件。它重复值4515两次给出以下内容文件列表:
this_is_newfile_1000_10515_10.out
this_is_newfile_1000_10515_20.out
this_is_newfile_1000_10515_30.out
this_is_newfile_1000_10515_40.out
this_is_newfile_1000_7515_10.out
this_is_newfile_1000_7515_20.out
this_is_newfile_1000_7515_30.out
this_is_newfile_1000_7515_40.out
this_is_newfile_1000_4515_10.out
this_is_newfile_1000_4515_20.out
this_is_newfile_1000_4515_30.out
this_is_newfile_1000_4515_40.out
这里是时髦的地方,关于汤姆的数组值2000的注意事项,迪克的值仍然是4515而不是循环回到10515.
this_is_newfile_2000_4515_10.out
this_is_newfile_2000_4515_20.out
this_is_newfile_2000_4515_30.out
this_is_newfile_2000_4515_40.out
this_is_newfile_2000_7515_10.out
this_is_newfile_2000_7515_20.out
this_is_newfile_2000_7515_30.out
this_is_newfile_2000_7515_40.out
this_is_newfile_2000_4515_10.out
this_is_newfile_2000_4515_20.out
this_is_newfile_2000_4515_30.out
this_is_newfile_2000_4515_40.out
(很抱歉很长的列表我想说清楚发生了什么)这重复了toms数组值为3000.任何人都可以帮忙吗?关于使用awk的行我还有另一个问题,我将在另一个条目中发布。
答案 0 :(得分:0)
弄清楚我的问题。在For循环中,我使用tom,dick和harry作为变量。但是在定义它们时,数组是
SELECT to_char(p.created_at, 'day') AS day_of_week,
p.price * p.quantity + p.tax * p.price * p.quantity AS sell,
p.quantity * p.cost AS total_cost
FROM products p
INNER JOIN jobs j ON j.id = p.job_id
INNER JOIN users u ON u.id = j.user_id
WHERE j.billed != 0 AND j.start_date >= CURRENT_DATE - INTERVAL '7 DAY' AND u.id = 242
GROUP BY to_char(p.created_at, 'day'), sell, total_cost
变量名称与"计数器"相同for循环中的变量。
tom=(values)
dick=(values)
harry=(values)
它应该是这样的:
for tom in ${tom[@]}
do
something
done
应该使用i或其他与tom不同的变量。这解决了这个问题。