Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 基于输出中返回的wc-l计数的echo 3语句_Shell_Awk_Xargs - Fatal编程技术网

Shell 基于输出中返回的wc-l计数的echo 3语句

Shell 基于输出中返回的wc-l计数的echo 3语句,shell,awk,xargs,Shell,Awk,Xargs,团队,我有下面的命令,运行良好,但我正在增强它,以获得如下结果 我的目标是报告count和display语句 我有三个条件要满足 1-如果结果=0,则未找到装载 2-如果结果=1-64,则在64下找到装载 3-如果结果=64+,则安装在64以上 如果计数为0,我希望输出: 0 mounts found on this hostname 如果找到了1-64个挂载,那么我想说找到了什么数字 x mounts found on hostname. 如果发现超过64个挂载,那么我想说 x moun

团队,我有下面的命令,运行良好,但我正在增强它,以获得如下结果

我的目标是报告count和display语句

我有三个条件要满足

1-如果结果=0,则未找到装载

2-如果结果=1-64,则在64下找到装载

3-如果结果=64+,则安装在64以上

如果计数为0,我希望输出:

0 mounts found on this hostname
如果找到了1-64个挂载,那么我想说找到了什么数字

x mounts found on hostname.

如果发现超过64个挂载,那么我想说

x mounts found on hostname that are more than 64
我试图学习如何将返回的计数与64进行比较,并相应地替换语句。我需要一个单行shell命令来完成所有这些,而不是一个多行shell命令,因为我需要将它安装到ansible shell模块中

样本输出:

mount | grep csi
有没有任何提示,为什么这在下面不起作用

尝试解决方案:使用awk和比较运算符

mount | grep -Ec '/dev/sd.*\<csi' | awk '$0 = 0 { printf "No mounts found", $0,"TRUE" ; } ($0 > 0 && $0 <= 64)  { print "Mounts are less than 64", $0 ;} $0 > 64  { print "Mounts are more than 64", $0 ;}'
预期:

node1 No mounts found

通过扩展和优化管道:

mount | grep -Ec '/dev/sd.*\<csi' \
| awk '{ print $0,"mounts found on hostname"($0>64? " that are more than 64." : ".") }'
mount | grep-Ec'/dev/sd.*\64?“超过64个。”:“)}”
grep
-c
选项-抑制正常输出;而是打印匹配行的计数


符号
\
分别匹配单词开头和结尾的空字符串。

0和
1-64的输出消息基本相同。为什么?我希望0和执行时的任何东西都有不同的输出,我没有得到任何输出,而且总是0。那么在您的解决方案中,这种模式正确吗?示例:我为
mount | grep csi | grep/dev/sd
获得了一个挂载,但当我使用你的挂载时,我什么也得不到
mount | grep-Ec'/dev/sd.*csi'
@AhmFM,然后
csi
出现在
/dev/sd
之前,或者前面没有空间。如果在你的问题中,你展示了你想要解析的
mount
的输出,那么它将有助于你编写一个工具来解析该输出。哦,我的错:现在添加了输出。请勾选完美,非常感谢。作品你能给我解释一下上面是什么,为什么是?你能解释一下你的表情吗awk@AhmFM,请参阅我的注释
/host/dev/sdc on /var/lib/kubelet/pods/11ea-a1f8-ac1f6b5995dc/volumes/kubernetes.io~csi/b93a-5f63e49f770c/mount type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048,fsc,readahead=4096)
mount | grep -Ec '/dev/sd.*\<csi' | awk '$0 = 0 { printf "No mounts found", $0,"TRUE" ; } ($0 > 0 && $0 <= 64)  { print "Mounts are less than 64", $0 ;} $0 > 64  { print "Mounts are more than 64", $0 ;}'
node1
node1 No mounts found
mount | grep -Ec '/dev/sd.*\<csi' \
| awk '{ print $0,"mounts found on hostname"($0>64? " that are more than 64." : ".") }'