【发布时间】:2015-08-26 16:44:37
【问题描述】:
我有一个名为 PPR 的打印假脱机系统,它在其他系统之间控制用户打印平衡。命令“ppuser show username”打印给定用户的信息,如下所示。
[root@localhost ~]# ppuser show dpacheco
Name: dpacheco
Fullname:
Balance: 99.00
Cutoff point: 0.00
Last Modified: Wed Oct 1 11:37:58 2014
Account lifetime: 365
Credit revoked: FALSE
我需要为所有系统用户输出一个“username;balance”对列表(PPR 用户与 /etc/passwd 中列出的相同)。为了实现这一点,我写了这个命令......
cat /etc/passwd | awk -F : '$user=$1 {system("ppuser show "$user)}'| awk '$1 ~ /Balance/ {print $user;$2}'
解释..
- 输出passwd的内容。
- 将其传递给 awk 语句。
- 我获得了用户名,将其存储在 $user var 中并使用它执行“ppuser show”命令。
- 将结果传递给另一个 awk 语句
- 为包含“余额”的行计算“ppuser show”输出,并打印用户名和余额,用分号分隔。
问题.. 我得到这样的输出
Balance: 100.00;100.00
Balance: -40.00;-40.00
Balance: 100.00;100.00
Balance: 100.00;100.00
Balance: 100.00;100.00
Balance: 100.00;100.00
.
.
.
我看到的是 $user 变量没有在管道之间正确传递。 我做错了什么?
谢谢
【问题讨论】:
-
只有您输出的内容才会通过管道传递。变量是每个进程的。所以抓住
Balance和Name行,并在第二个awk 脚本中按照你想要的方式打印出来。或者在一个 awk 脚本中完成所有操作。