【问题标题】:read and set the value of variable from log file to KSH shell script从日志文件中读取变量的值并将其设置为 KSH shell 脚本
【发布时间】:2016-10-08 03:37:46
【问题描述】:

我有一个日志文件(在运行 python 脚本的输出中) 日志文件包含我要传递给 shell 脚本的变量列表。我该如何做到这一点

示例 日志文件有以下内容。它有变量 x, y, z

文件example.log的内容:

2016-06-07 15:28:12.874 INFO x = (10, 11, 12)
2016-06-07 15:28:12.874 INFO y = case when id =1 then gr8 else ok end
2016-06-07 15:28:12.874 INFO z = 2016-06-07

我想让shell脚本读取变量并在shell程序中使用

示例外壳 shell.ksh

分配变量

var1 = read_value_x from example.log
var2 = read_value_y from example.log

是否有一个通用的 shell 函数可以用来读取日志并解析变量值

谢谢 PMV

【问题讨论】:

  • 您想在 var1,var2 中设置日志文件的哪一部分?一个例子 o/p 总是有帮助的。在提出问题的同时发布您尝试过的内容。
  • 日志中带“=”的表达式为变量列表。我想阅读第一行并将其设置为 var1,第二行并将其设置为 var2 ...我没有尝试任何代码,因为我是 shell 脚本的新手。我知道可以在这种情况下使用正则表达式,但不确定如何循环它们/创建通用函数
  • 你想要多通用?如果您可以将文本按摩成一段 shell 脚本,您可以 eval 这样做,但普遍的共识通常是您不应该这样做。
  • 我将始终拥有一个带有这样设置的日志文件。我想将日志文件作为输入传递并在 shell 中设置变量
  • 我使用 KSH(Korn Shell)。我不确定 bash(我有哪个版本的 bash)。 Ae 数组在 bash 中处理得更好?

标签: variables redirect ksh


【解决方案1】:

对于小文件,您可以在 ksh 中合理有效地执行此操作:

# Read into variables $var1, $var2, ...
n=0
while IFS='=' read -r unused value; do
  typeset "var$((++n))=${value# }"
done < example.log

# Enumerate the variables created.
# Equivalent to: `echo "$var1"`, `echo "$var2"`, ...
for (( i = 1; i <= n; ++i)); do
  eval echo \"\$'var'$i\"
done

【讨论】:

  • 如何添加连接 var1 = x (10,11,12)? ..我在想,如果在外壳中使用 eval 和循环的组合来分配这些变量,以便外壳将采用这些值..
【解决方案2】:
var1=$(awk -F " = " '$1 ~ /[x]$/' < file.log)
var2=$(awk -F " = " '$1 ~ /[y]$/' < file.log)

上面的 awk 实用命令将使用分隔符 " = " 并使用正则表达式检查 $1 的末尾是否有 xy ;如果是,我们将值设置为相关变量。

如果你想在变量中设置第二部分

var1=$(awk -F " = " '$1 ~ /[x]$/{print $2}' < file.log)
var2=$(awk -F " = " '$1 ~ /[y]$/{print $2}' < file.log)

【讨论】:

    【解决方案3】:

    读取日志文件,使用正则表达式获取每行=之后的值,并在循环中赋值给一个变量。

    【讨论】:

    • 我可以做任何示例代码或关键字搜索来获得此功能吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2019-07-26
    • 2020-05-07
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多