在 bash 中,在 txt 中查找数字并将其用作 bash 脚本中的变量

In bash, looking for a number in a txt and use it as a variable in a bash script

我有一个 bash 脚本,它可能使用 process.txt

中的一个变量

precess.txt 具有这种形式:

Processing triangulated mesh.       
 => Generating   
 => Preparing    
 => Infilling   
 => Generating  
 => Exporting   
Done. Process took 0 minutes and 4.739 seconds.  
Filament required: 4849.4mm (34.3cm3).

我想获取灯丝值作为变量(在本例中为 4849.4)

我不知道该怎么做。也许在 python 或 perl 中?

使用 python re:

   s = """
Processing triangulated mesh.
 => Generating
 => Preparing
 => Infilling
 => Generating
 => Exporting
Done. Process took 0 minutes and 4.739 seconds.
Filament required: 4849.4mm (34.3cm3)."""


import re 

print(re.findall("Filament required:\s+(\d+\.\d+)",s))
4849.4

只需打开文件并阅读:

with open(your_file) as f:
   print(re.findall("Filament required:\s+(\d+\.\d+)",f.read()))
4849.4

使用 grep:

$ NUM=$(grep -Po '(?<=Filament required: )[0-9\.]*' process.txt)
$ echo $NUM
4849.4

使用管道:

$ num=$(cat process.txt|grep Filament|cut -d " " -f 3|cut -d "m" -f 1)

$回显$num

另一种使用方式awk

NUM=`awk -F':' '~/^Filament/{split(,a," "); gsub('/[^0-9.]/',"",a[1]); print a[1]}' process.txt`
echo "$NUM"
4849.4

说明

  • -F':'指定字段分隔符
  • ~ /^Filament/ {...} 对 field1 (</code>) 匹配 (<code>~) 以字符串开头的正则表达式的行执行某些操作(如 {...} 所示) ( ^) 与 Filament
  • split(,a," ") 将 field2 (</code>) 按 <code>" " 拆分为标记为 a
  • 的数组
  • gsub('/[^0-9.]/',"",a[1]) 将数组 (a[1]) 的元素 1 中不是数字或句点 ([^0-9.]) 的任何字符替换为空 ""
  • print a[1] 打印结果