如何用gsub修改awk中变量的值并将其打印出来?

时间:2016-12-22 16:14:48

标签: linux awk

我尝试在特定行的特定列中剪切数值。要获取我使用的列:

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print $i}' $file

输出符合要求:

executionTime="120"

但我只是对数值感兴趣。如果我使用

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print $i}' $file | awk '{gsub(/[^0-9]/,""); print}')

awk 'BEGIN{sedcmd="sed 's/[^0-9]//g'"} /REGEX1{for(i=1;i<=NF;++i)if($i~/REGEX2/) print $i | sedcmd}' tmpfile

它有效。但是一旦我尝试在动作块中使用sub(),gsub()或gensub()就会失败。例如:

awk '/REGEX1/{for(i=1;i<=NF;++i)if($i~/REGEX2/)print gsub(/[^0-9]/,"",$i)$i}' $file

输出为7。

我做错了什么?

gawk -V
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.1)

3 个答案:

答案 0 :(得分:2)

你想:

awk '/REGEX1/{ for(i=1;i<=NF;++i) if($i~/REGEX2/){x=$i; gsub(/[^0-9]/,"",x); print x}'

或仅限gawk:

awk '/REGEX1/{ for(i=1;i<=NF;++i) if($i~/REGEX2/){print gensub(/[^0-9]/,"","g",$i)}'

检查这两个函数的手册页。

答案 1 :(得分:1)

gsub功能打印number of substitutions made。这就是为什么在删除$i中的每个数字字符后都会得到一个数字。

您应该使用:

if ($i~/REGEX2/) { gsub(/[^0-9]/,"",$i); print $i}

答案 2 :(得分:0)

使用GNU awk,您可以使用from geopy.geocoders import GeocoderDotUS geolocator = GeocoderDotUS(format_string="%s, Cleveland OH") address, (latitude, longitude) = geolocator.geocode("11111 Euclid Ave") print(address, latitude, longitude) 11111 Euclid Ave, Cleveland, OH 44106 41.506784 -81.608148 返回修改后的字符串:

gensub