【问题标题】:Bash Awk in While Loop Creating Blank SpacesBash awk 在 While 循环中创建空格
【发布时间】: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


【解决方案1】:

为什么只使用 awk:

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

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2018-03-20
    • 2014-12-21
    • 2016-08-27
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多