使用数组项作为文件名创建文件

Creating files using array items as filenames

我正在尝试创建给定 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' 就乱七八糟了

可以这样做

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

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) - 执行操作系统命令command