2017-06-12 78 views
-1

我试图创建文件给定的ID和其各自的日期。我想使用数组项来设置这些文件的名称。问题是,结果不是我在创建文件时所期待的。我很感谢你的帮助。使用数组项目创建文件作为文件名

所需的输出:

我想在下面的格式创建文件:

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 

****我已经注意到,在文件名只使用'/path/FILE_${array[ID]}.txt',显示所有正确的ID,但同时使用时,'/path/FILE_${array[Da]}_${array[ID]}.txt'被搞砸了

+0

变量'Da'与索引'DA'。 – ArturFH

+0

感谢Artur的观察,我忘了在将它复制到身体时更改变量。总之,问题依然存在。 –

+0

你能否在修复之后粘贴电流输出? – ArturFH

回答

2

可以这样做

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 
+0

数组索引已经在算术上下文中进行了评估; '$ {array [i]}'和'$ {array [i + 1]}'就足够了。 – chepner

+1

对于'for'循环也是一样的:对于((i = 0; i <$ {#array [@]} - 1; i + = 2))''。 – chepner

+0

@chepner是的,不知道为什么我在循环中做到了这一点,但对于数组索引,我不是100%,但很确定它们在老版本中并不像那样工作。 – 123

1

AWK另一种方法:

awk -F, '{ for(i=1;i<=NF;i+=2) if($i!="") system("touch FILE_"$i"_"$(i+1)".txt") }' input 

检查结果:

> ls -1 FILE_* 
FILE_300002_20170515.txt 
FILE_400044_20170101.txt 
FILE_500032_20170426.txt 

  • system(command) - 执行操作系统命令命令
+0

这个解决方案也符合我的期望,它的工作原理!”@Roman“和@ 123你真的帮助过我这么多,你们是天才! –