2016-02-25 29 views
0

我在bash中运行一个sql查询来获取文件名和它们的计划时间。然后这些文件将在与其关联的计划时间运行。查询输出如下。我需要捕获日期和时间以及文件名并在指定的时间运行文件。如何将两列存储在单独的数组中。Bash:在数组中存储sql查询

file_name    | schedule_time 
--------------------------+--------------------- 
file 1     | 2016-02-25 07:26:00 
file 2     | 2016-02-26 07:37:00 
file 1     | 2016-02-27 07:39:00 
file 3     | 2016-02-27 12:00:00 
file 1     | 2016-02-28 07:25:00 
file 2     | 2016-02-29 02:15:00 
file 2     | 2016-02-29 08:38:00 
file 1     | 2016-02-29 12:00:00 
+0

为什么不保持所生成的文件和读取一个cron任何条目工作? – anubhava

+0

@anubhava我从来没有使用过cron。我将如何实施一项cron工作。 –

+0

所以你想在你的shell程序中有一个包含所有文件名的数组,以及一个包含所有时间戳的数组?幼稚的解决方案将是逐行读取输出,分割每一行,并将这些部分放入相应的数组(当然忽略前两行)。我只是想知道你想要在阵列之后做什么。你确定,处理你的数据的不同数据结构不会更好吗? – user1934428

回答

0

我不知道究竟为什么需要它,但这里是一个普通的庆典解决方案:

#!/bin/bash 

sqldata="file_name    | schedule_time 
--------------------------+--------------------- 
    file 1     | 2016-02-25 07:26:00 
    file 2     | 2016-02-26 07:37:00 
    file 1     | 2016-02-27 07:39:00 
    file 3     | 2016-02-27 12:00:00 
    file 1     | 2016-02-28 07:25:00 
    file 2     | 2016-02-29 02:15:00 
    file 2     | 2016-02-29 08:38:00 
    file 1     | 2016-02-29 12:00:00" 

sqldata=$(echo "$sqldata" | tail -n +3) # skip first 3 lines 

oldifs="$IFS" 
IFS=$'\r\n' 
lines=($sqldata) 
IFS="$oldifs" 

files=() 
dates=() 
idx=0 

for i in "${lines[@]}" 
do 
    files[idx]=$(echo $i | sed -E 's/ +\|.*//') 
    data[idx]=$(echo $i | sed -E 's/ .*\|//') 
    idx=$(($idx + 1)) 
done 

echo files: 
echo ${files[@]} 
echo data: 
echo ${data[@]}