bash - 使用 bash shell 脚本和 awk 提取子字符串

标签 bash shell awk

所以,我有一个名为“dummy”的文件,其中包含以下字符串:

"There is 100% packet loss at node 1".

我还有一个小脚本,我想用它从这个文件中获取百分比。脚本如下。

result=`grep 'packet loss' dummy` |
awk '{  first=match($0,"[0-9]+%")
        last=match($0," packet loss")
        s=substr($0,first,last-first)
        print s}'

echo $result

在这种情况下,我希望 $result 的值基本上为 100%。但出于某种原因,它只是打印出一个空白字符串。谁能帮帮我?

最佳答案

您需要在 awk 命令结束后放置结束反引号,但最好使用 $() 代替:

result=$( grep 'packet loss' dummy |
awk '{  first=match($0,"[0-9]+%")
    last=match($0," packet loss")
    s=substr($0,first,last-first)
    print s}' )

echo $result

但你可以这样做:

result=$( grep 'packet loss' | grep -o "[0-9]\+%" )

关于bash - 使用 bash shell 脚本和 awk 提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573009/

相关文章:

linux - 为什么 "/bin/sh cd/root/eos/"不起作用,但 "/bin/sh -c ls && cd/root/eos/"在 centos 中运行良好

bash: A: 无法识别的历史修饰符

shell - 别名 rm 和/bin/rm 的区别

awk - 如何使用条件表达式来选择数据?

linux - 在 HTML 标签中匹配模式和替换

mysql - 无法在 Amazon Cloud9 免费帐户上安装/使用 MySQL

git - 如何获取当前目录相对于git仓库根目录的路径?

linux - 使用正则表达式将 bash 脚本转换为 sh

windows - 缺少从 Windows 命令行或批处理中将引号“符号放入文件中

linux - 所有线中最大和最小的