bash awk - 如何从这一行中提取单个字符

时间:2015-07-24 19:40:42

标签: linux bash awk

我有来自lmstat输出的以下行:

Users of ccmpsuite:  (Total of 2 licenses issued;  Total of 1 license in use)

  "ccmpsuite" v2016.03, vendor: cdlmd
  floating license

    <username> <nodename> /dev/tty (v2015.02) (<hostname>/1999 436), start Fri 7/17 21:41

我想以某种方式提取&#39; 2&#39;和&#39; 1&#39;从第一行获得总许可证和使用的总许可证,以便在其他地方使用。据我所知,lmstat不支持任何最小文本或xml输出。我知道我可以用这个来唤醒整行:

awk '/^[ ]*Users of[ ]*/'

我如何提取&#39; 1&#39;以及&#39; 2&#39;?

3 个答案:

答案 0 :(得分:2)

您可以使用grep -oP来获取两个计数:

grep -oP '\d+(?= license)' file
2
1

答案 1 :(得分:2)

因为您使用awk标记了问题:

awk '/Users of ccmpsuite:/{print $6,$11}' input.txt
2 1

击:

#!/bin/bash

while read line
do
    if [[ $line =~ "Users of ccmpsuite:" ]]
    then
        match=($line)
        echo ${match[5]}
        echo ${match[10]}
    fi
done < input.txt

答案 2 :(得分:0)

Awk没有捕获正则表达式分组,但perl确实:

perl -n -e'/Total of (\d+) licenses/ && print $1'

将打印许可证数量:

perl -n -e'/Total of (\d+) license/ && print $1'

将打印正在使用的许可证数量。