【问题标题】:How to best edit text in a .txt file for use with mysql如何最好地编辑 .txt 文件中的文本以与 mysql 一起使用
【发布时间】:2015-07-06 21:24:19
【问题描述】:

我正在运行一个从少数寄存器收集信息的 shell 脚本。它将数据转储到文本文件中,如下所示:(我已将要上传的信息以粗体显示)

log.txt:

ID:3498x39
时间:12:24:08
日期:06/07/2015
4115 134 (0x86)
4116 323 (0x143)
4117 20 (0x14)
4118 3 (0x3)
4119 26 (0x1A)
4120 1284 (0x504)

然后在 10 分钟后再次重复下一批数据。

我现在想做的是在收集到这些信息后用这些信息更新一个 MySQL 数据库。是否需要一个 python 程序来格式化数据,我认为是这样的:

12:24:08 2015/06/07 134 323 20 3 26 1284

或者有没有更简单的方法?

【问题讨论】:

  • 我不清楚你想问什么,在这里。你的意思是你有一个带有日期时间字段的mysql表,每个寄存器值都有一个单独的字段(所以,你有一个7列的表;1个日期时间后跟6个整数),你想插入那个桌子?或者您的意思是您只是想将上面的多行字符串转换为下面的格式,以便您可以将该字符串放入 mysql db 中?因为,如果是后者,即使在 bash 中也是微不足道的。见鬼,在 bash 中做后者甚至可能是微不足道的,这取决于数据源是否可信。
  • 可以使用带有cut -d' ' -f2 的简单for 循环将字符串简单地转换为合理的格式。
  • 也许您可以使用带有 pythons re 模块的正则表达式来匹配然后重新格式化数据。虽然你也可以使用 shell 脚本来做到这一点。

标签: python mysql linux shell


【解决方案1】:

这假定格式与您指定的一样。因此,它假定任何错误输出都会发送到 stderr。

#!/usr/bin/env bash

output=""
read line # throw away the ID line
for ((i = 0; i != 9; ++i))
do
  read line
   formatted="$(echo "$line" | cut -d' ' -f2)"
  case $i in
    1) formatted="$(echo "$formatted" | sed 's#\(\d+/\d+\)/\(\d+\)#\2/\1#')"
       ;;
    *) ;;
  esac
  output="$output $formatted"
done
echo "$output"

以您的问题作为输入运行上述内容。

bash-3.2$ ./test < input.txt
 12:24:08 06/07/2015 134 323 20 3 26 1284 

鉴于上面只有 14 行代码,本可以更短,并且需要大约 2 分钟的时间来编写,我假设我一定没有回答您提出的问题。因为,如果这是您问题的答案,那么您提出了一个错误的问题。

【讨论】:

    【解决方案2】:

    Python 将是一种相当简单的修改方法。但是,如果您已经有一个以该格式输出的 shell 脚本,为什么不直接修改 shell 脚本以将其输出为 log.txt 或其他文件中的新格式?当然,这并不能修复已经存在的记录,但它会阻止将来转换 log.txt 的需要。

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 2010-09-06
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多