【发布时间】:2016-06-09 06:51:59
【问题描述】:
我已经使用 shell 脚本几个月了,所以我还是个初学者,在下面的问题中我需要你的帮助:
我有一个浮动许可证报告,其中显示了用户列表、他们的 ID、有多少用户正在使用许可证、许可证已使用了多少分钟以及许可证的状态。我需要从中打印已使用 15 分钟或更长时间的许可证列表,并从该列表中打印出使用每个许可证的用户数量列表,但条件是获取状态为“r”的许可证。我将第二个列表分配给一个变量,因为稍后我将在代码中使用它。
这是我写的代码:
cat $license_report | awk '{if ($3 >=15) print $1}' | while read line
license_report 是我存储报告的地方。 $3 是许可证已使用的分钟数列,$1 是用户 ID 列,$2 是有多少用户正在使用许可证,$4 是许可证状态。我这里的方法是使用while循环列出已使用15分钟的许可证,然后再次cat报告,grep我从循环中得到的结果并使用awk获取具有“r”状态的许可证
do
running_licenses=$(cat $license_report | grep -w $line| awk '{if ($4 != "r") print $3}')
这段代码运行良好,没有任何错误,但我得到的列表有空格。所以一开始它显示了四行,其余的都是空的。这是我得到的输出
3
5
6
2
#empty space
#empty space
#empty space
#empty space
#empty space
#empty space
#empty space
我想我得到了空白,因为在我从 while 循环中获得的列表中,并非所有许可证都具有状态“r”,因此它打印状态为“r”的许可证并将其余部分留为空白空间。
我的问题是,我怎样才能打印状态为“r”的许可证而不打印空格?另外,您知道实现我想要做的更好的方法吗?
非常感谢您提前提供的帮助。
【问题讨论】:
-
如果
$4 == "r",awk脚本根本不会打印任何内容,因为没有其他规则。因此,awk脚本的输入包含$4 != "r" && $3 = ""为真的行。这些很可能是空行。所以,问题可能是正则表达式$line。 -
您能提供示例输入和预期输出吗?
-
感谢您的输入,但条件不是 $3 == " "。条件是 $3 大于或等于 15 且 $4 不等于 r。我尝试了@7171u 建议的答案,它奏效了。
-
感谢您的意见@andlrc。输入是一个有四列的文件,输出应该只是我上面提到的前四行,没有空格 3 5 6 2
标签: bash shell loops awk while-loop