【发布时间】:2015-02-08 06:40:17
【问题描述】:
我有一个文件从 mySQL 复制 show processlist 命令的结果。 该文件如下所示:
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 1030455
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 1004
State: Has read all relay log; waiting for the slave
I/O thread to update it
Info: NULL
它会在同一个结构中继续运行几次。
我想使用 AWK 仅获取这些参数:时间、ID、命令和状态,并将这些参数中的每一个存储到不同的变量或数组中,以便我以后可以在我的 bash shell 中使用/打印它们。
问题是,我对 AWK 很不好,我不知道如何从文件中分离出我想要的参数并将它们设置为 bash 变量或数组。
非常感谢您的帮助!
编辑:这是我目前的代码
echo "Enter age"
read age
cat data | awk 'BEGIN{ RS="row"
FS="\n"
OFS="\n"}
{ print $2,$7}
' | awk 'BEGIN{ RS="Id"}
{if ($4 > $age){print $2}}'
文件“数据”包含我上面粘贴的块。如果输入的“年龄”小于数据文件中的时间参数(在我的 awk 代码中为 $4),代码应该返回 ID 参数,但它什么也不返回。
如果我删除 if 语句并打印 $4 而不是 $2 这就是我的输出
Enter age
1
1030455
1004
2144
2086
0
所以我在想也许那个空白行会以某种方式弄乱我的 AWK 打印?有没有一种简单的方法可以在保留我的其他数据的同时忽略该空白行?
【问题讨论】:
-
将输出粘贴到问题中,用鼠标标记,然后使用工具栏中的
{}工具将其标记为文字代码。 -
awk不能直接设置 shell 变量。您可以做的是将awk的输出通过管道传送到外壳while read var1 var2 var3循环。 -
嘿,谢谢,太棒了:)
-
虽然我并没有真正理解你的解决方案,你能详细说明一下吗?
-
SO 不是免费的编码服务,我们不会为您编写代码。你需要做一些尝试来解决它。如果您无法使其正常工作,请发布您的代码,我们会尽力帮助您修复它。