在 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]
打印结果
我有一个 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]
打印结果