【问题标题】:Populating a zenity list with results from mysql使用 mysql 的结果填充 zenity 列表
【发布时间】:2015-08-13 08:37:16
【问题描述】:

我正在做一个使用 BASH 作为“电话簿”的小项目。它将数据存储在 mysql 数据库中,并使用临时文件来处理 Selects。

我正在使用 zenity 可视化界面,所以我想使用 Zenity 列表对话框显示存储在数据库中的数据。为此,我需要单独使用列的值,因此我需要使用 awk 命令来获取这些值,但在组合 zenity 和 awk 命令时遇到了麻烦。

存储数据库的值,在临时文件中用\t分隔。

echo "SELECT name,address,telephone,email FROM agenda" | mysql projAgenda -N -u root -p12345 >> tempAgenda.dat

使用 zenity --list 显示数据

awk -F'\t' '{zenity --list --title="Listar registos" --text="" --column="Name" --column="Address" --column="Telephone" --column="E-mail" $1 $2 $3 $4}' tempAgenda.dat

但我总是遇到同样的错误:

awk:第 1 行:= 或附近的语法错误

有人可以帮忙吗?我知道我在尝试混合这两个命令时可能会搞砸了,但我想不出另一种方式。

编辑:查询的输出(由制表符分隔):

José Manel  Rua António Cão 219886868   zemaneli@live.com 
Cláudio Pinto   Praça Dom Rui da Camara 219886820   claudiopinto@live.com

【问题讨论】:

  • zenity 不是 shell 命令吗?为什么要在 awk 脚本中运行它?
  • 你能不运行 zenity 命令并将其通过管道传输到 awk 吗?
  • 编辑您的问题以包含 mysql 查询的 1-2 行输出。祝你好运。
  • 我编辑了帖子避难所。 awk 运行良好。我试过awk -F'\t' '{ print "NAME: " $1 "\nADDRESS: " $2 "\nTELEPHONE:" $3 "\nE-MAIL: "$4 }' tempAgenda.dat 它有效。我对此真的很陌生,昨天才开始正确学习bash,所以我认为zenity会像打印一样工作,所以我基本上试图替换它。我不知道如何混合这两个命令,而且我知道我不能把一个放在另一个里面是有道理的。我应该尝试什么?

标签: bash shell awk scripting zenity


【解决方案1】:

您需要将 mysql 返回的制表符分隔符替换为新行,因为zenity 期望在从标准输入读取时每列位于单独的行上。您可以为此使用tr

mysql -N ... | tr '\t' '\n' | zenity --list --title="Listar registos" --text="" --column="Name" --column="Address" --column="Telephone" --column="E-mail" 

这将产生以下列表:

【讨论】:

  • 那行不通,因为我使用 zenity 列表对话框显示的原因是在一个窗口中显示所有这些...但无论如何谢谢
  • 我将它们全部显示在一个窗口中。你试过了吗?
  • 等待我刚刚过时的评论。让我检查一下。看起来不错。
  • 是的,我也想通了 :) .. 我从来不知道当输出通过管道(或重定向到文件)时 mysql 会输出制表符分隔的数据。在这篇文章中也学到了很多东西。也谢谢你! ;)
  • /offtopic 我喜欢这里的西班牙语和德语的结合。让我想唱“我们就是世界”:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
相关资源
最近更新 更多