Bash:在数组中存储sql查询

时间:2016-02-25 15:14:13

标签: bash shell crontab

我在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

1 个答案:

答案 0 :(得分:0)

我不确切知道你为什么需要它,但这里有一个简单的 bash 解决方案:

#!/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[@]}