我正在尝试从包含此文件的文件中取一个数字:
<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
我认为问题来自空间。 ?
谢谢
答案 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对象。获取您感兴趣的范围的文本内容,删除逗号。