使用mysql

时间:2015-05-30 14:11:23

标签: bash shell awk scripting zenity

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

我正在使用zenity可视界面,所以我想使用Zenity List对话框显示存储在数据库中的数据。为此,我需要单独使用列的值,因此我需要使用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

1 个答案:

答案 0 :(得分:2)

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

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

这将产生以下列表:

enter image description here