我尝试在特定行的特定列中剪切数值。要获取我使用的列:
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)
答案 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