【问题标题】:Bash: store sql query in an arrayBash:将sql查询存储在数组中
【发布时间】:2016-02-29 17:18:19
【问题描述】:

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

【问题讨论】:

  • 为什么不将结果保存在文件中,然后从 cron 作业中读取任何条目?
  • @anubhava 我以前从未使用过 cron。我将如何实施 cron 作业。
  • 所以你想在你的shell程序中有一个包含所有文件名的数组和一个包含所有时间戳的数组?天真的解决方案是逐行读取输出,分割每一行,然后将部分放入各自的数组中(当然忽略前两行)。我只是想知道您以后想对数组做什么。您确定用于处理数据的不同数据结构不会更好吗?

标签: bash shell crontab


【解决方案1】:

我不知道你为什么需要它,但这里有一个简单的 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[@]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多