Arrays 使用数组项作为文件名创建文件
我正在尝试创建给定ID及其相应日期的文件。我想使用数组项设置这些文件的名称。问题是,结果并不是我在创建文件时所期望的。谢谢你的帮助 所需输出:Arrays 使用数组项作为文件名创建文件,arrays,linux,bash,shell,filenames,Arrays,Linux,Bash,Shell,Filenames,我正在尝试创建给定ID及其相应日期的文件。我想使用数组项设置这些文件的名称。问题是,结果并不是我在创建文件时所期望的。谢谢你的帮助 所需输出: FILE_300002_400044.txt FILE_300002_300002.txt FILE_300002_500032.txt 我想创建以下格式的文件: FILE_300002_20170515.txt FILE_500032_20170426.txt FILE_400044_20170101.txt 电流输出: FILE_300002_4
FILE_300002_400044.txt
FILE_300002_300002.txt
FILE_300002_500032.txt
我想创建以下格式的文件:
FILE_300002_20170515.txt
FILE_500032_20170426.txt
FILE_400044_20170101.txt
电流输出:
FILE_300002_400044.txt
FILE_300002_300002.txt
FILE_300002_500032.txt
文件示例:
这是我的输入文件的内容:
300002,20170515,500032,20170426,400044,20170101
我的代码:
IFS=',' read -r -a array <<< "$input"
ini=1
ID=0
Da=1
num="${#array[@]}"
let num=num/2
while [ $ini -le $num ];do
touch "/path/FILE_${array[Da]}_${array[ID]}.txt"
let ini=ini+1
let Da=Da+2
let ID=ID+2
done
IFS=”,'read-r-a数组可以这样做
IFS=',' read -r -a array <<< "$input"
for((i=0;i<${#array[@]}-1;i+=2));do
touch "/path/FILE_${array[i]}_${array[i+1]}.txt"
done
IFS=”,“read-r-a数组awk替代方法:
awk -F, '{ for(i=1;i<=NF;i+=2) if($i!="") system("touch FILE_"$i"_"$(i+1)".txt") }' input
系统(命令)
-执行操作系统命令
变量Da
vs索引Da
。感谢您的观察,我在将变量复制到正文时忘记了更改变量。无论如何,问题仍然存在。请在修复之后粘贴当前输出好吗?“/path/FILE{array[Da]}{array[ID]}.txt”
可能是/path/FILE{array[ID]}{array[Da]}.txt
。ID
可以放在第一位。数组索引已经在算术上下文中进行了计算${array[i]}
和${array[i+1]}
就足够了。同样的for
循环:for((i=0;i@chepner是的,我不知道为什么我会在循环中这样做,但对于数组索引,我不是100%,但我很确定它们在旧版本的Bash中不会那样工作。在3.2中它肯定是这样工作的,更改日志暗示至少从2.0开始就这样了。谢谢你的帮助“@123”还有@chepner。这个解决方案满足了我的期望。你们太棒了!这个解决方案也满足了我的期望,它很有效!@Roman”和@123你们真的帮了我很多。你们真是天才!