Linux bash awk-如何从此行中提取单个字符

Linux bash awk-如何从此行中提取单个字符,linux,bash,awk,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 Fr

我从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

如何提取“1”和“2”?

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

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

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

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

Awk不捕获正则表达式分组,但perl会:

perl -n -e'/Total of (\d+) licenses/ && print $1'
将打印许可证的数量:

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

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

Awk不捕获正则表达式分组,但perl会:

perl -n -e'/Total of (\d+) licenses/ && print $1'
将打印许可证的数量:

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

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

因为您用awk标记了问题:

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

#/bin/bash
读行时
做
如果[[$line=~”ccmpsuite的用户:“]]
然后
匹配=($line)
echo${match[5]}
echo${match[10]}
fi
完成
因为您用awk标记了问题:

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

#/bin/bash
读行时
做
如果[[$line=~”ccmpsuite的用户:“]]
然后
匹配=($line)
echo${match[5]}
echo${match[10]}
fi
完成
使用该模式的
{action}
块打印出适当的字段(
$6
$11
或任何内容)。使用该模式的
{action}
块打印出适当的字段(
$6
$11
或任何内容).作为awk代码的公认答案-尽管其他答案也很好。不过,我正在修改的代码已经是awk,因此插入grep/perl需要更多的努力。很高兴您喜欢它。添加了一个bash版本只是为了好玩。被认可的答案是awk代码-尽管其他答案也很好。不过,我正在修改的代码已经是awk,因此插入grep/perl需要更多的努力。很高兴您喜欢它。添加了一个bash版本也只是为了好玩。