在awk中,你可以使用正则表达式来匹配并提取等号后的数字。假设你的数据在一个名为data.txt的文件中,每行格式如下:
key1="value1"
key2="value2 with 123 numbers"
你可以使用以下awk命令来提取等号后的数字:
awk -F\" '{for(i=2;i<=NF;i+=2){if($i ~ /^[0-9]+$/) print $i}}' data.txt
解释:
-F\"
:设置字段分隔符为双引号,这样awk会将每行按照双引号分割成多个字段。for(i=2;i<=NF;i+=2){...}
:从第二个字段开始遍历,每次跳过一个字段(因为双引号之间的内容是我们关心的部分,而它们总是成对出现)。if($i ~ /^[0-9]+$/)
:检查当前字段是否只包含数字。print $i
:如果当前字段只包含数字,则打印出来。这个命令会输出:
value1
123
注意,这个命令假设你的值要么完全是数字,要么不包含任何数字。如果你的数据格式更复杂,你可能需要调整正则表达式来适应不同的情况。
如果你想在等号后面直接提取数字,而不是整个值,你可以稍微修改一下正则表达式:
awk -F\" '{for(i=2;i<=NF;i+=2){if($i ~ /^\"[0-9]+\"$/) sub(/^\"|\"$/,"",$i); if($i ~ /^[0-9]+$/) print $i}}' data.txt
这里使用了sub
函数来去除双引号。最终输出将是:
123
这个命令会忽略那些不包含数字的值。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云