繁体   English   中英

在While循环中创建新空格的Bash Awk

[英]Bash Awk in While Loop Creating Blank Spaces

我已经使用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分钟的许可证,然后再次提交报告,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”的许可证而不打印空白? 另外,您知道一种更好的方法来实现我的目标吗?

非常感谢您的提前帮助。

为什么只使用awk:

running_licenses=$(awk '$3>=15 && $4 != "r"{print $3}' $license_report)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM