用awk从文件中取数字

时间:2014-12-11 21:51:09

标签: awk

我正在尝试从包含此文件的文件中取一个数字:

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

我正在使用我写的这个函数:

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

我想获得3,200(如果可能的话,3200)。但是我无法找到它......

这是我的输出:

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

我认为问题来自空间。 ?

谢谢

3 个答案:

答案 0 :(得分:1)

这应该做:

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

awk '/<span class="num text-emphasized">/ {f=NR} f && f+1==NR {sub(/,/,"");print $1}' file
3200

找到<span class="num text-emphasized">后,打印下一行。

答案 1 :(得分:1)

喜欢这个? (用于多字符RS的GNU awk和用于匹配()的第3个arg:

$ 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

无论在线和线之间有什么空白区域,上面都会有效。

答案 2 :(得分:0)

看起来你有一些HTML。我建议使用HTML解析器:

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

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