使用awk从文件中获取编号

使用awk从文件中获取编号,awk,Awk,我试图从包含以下内容的文件中获取一个数字: <span class="num text-emphasized"> 3,200 </span> commits 3,200 提交 我正在使用我写的这个函数: awk ' BEGIN { found=0 } /<span class="num text-emphasized">/ { found=1 } found == 1 && /[:digit:]/

我试图从包含以下内容的文件中获取一个数字:

     <span class="num text-emphasized">
      3,200
    </span>
    commits

3,200
提交
我正在使用我写的这个函数:

awk '
 BEGIN { found=0 }
/<span class="num text-emphasized">/ { found=1 }
found == 1 && /[:digit:]/ { print ; num=$0 }
found == 1 && /commits/ { exit 1 }
 END   { print num
}' myFile
awk'
开始{found=0}
//{found=1}
已找到==1&&/[:digit://{print;num=$0}
找到==1&&/commits/{exit 1}
结束{print num
}“我的文件
我正试图得到3200(或3200,如果可能的话)。但是我找不到它

这是我的输出:

    <span class="num text-emphasized">
    commits
    commits

提交
提交
我认为问题来自空间

谢谢

这应该可以:

awk '/<span class="num text-emphasized">/ {f=NR} f && f+1==NR {print $1}' file
3,200
awk'/{f=NR}f&&f+1==NR{print$1}文件
3,200

awk'/{f=NR}f&&f+1==NR{sub(/,/,“”);打印$1}文件
3200
找到
后,打印下一行。

像这样吗?(GNU awk用于多字符RS和第三个要匹配的参数()):

$awk-vrs='^$''匹配($0,/.*\s*(\s+)\s*/,a){gsub(/,/,“”,a[1]);打印[1]}文件
3200

无论行中和行之间有多少空白,上面的内容都会起作用。

看起来您已经有了一些HTML。我建议使用HTML解析器:

$ perl -Mojo -E'$d=Mojo::DOM->new(do { local $/; <> }); 
  say $d->at("span.num.text-emphasized")->text =~ s/,//r' file.html
3200
$perl-Mojo-E'$d=Mojo::DOM->new(do{local$/;});
假设$d->at(“span.num.text-emphasisted”)->text=~s/,//r'file.html
3200

在HTML文件中,构造一个DOM对象。获取您感兴趣的范围的文本内容,删除逗号。

它应该是
[[:digit:]
而不是
[:digit:]
$ awk -v RS='^$' 'match($0,/.*<span\s+class="num\s+text-emphasized">\s*(\S+)\s*<\span>/,a){gsub(/,/,"",a[1]); print a[1]}' file
3200
$ perl -Mojo -E'$d=Mojo::DOM->new(do { local $/; <> }); 
  say $d->at("span.num.text-emphasized")->text =~ s/,//r' file.html
3200