Zar*_*ina 2 freebsd grep awk text-processing
假设我有一个包含以下 5 行的文本文件:
Tue 18 2022 car model: Toyota , car motor: 2001 , car color: blue , year of production: 2018
Thu 19 2022 car model: Mercedes , car color: black , year of production: 2012 , car motor: 4000
Thu 20 2022 used: yes , car motor: 1999 , car model: Mercedes , car color: black , year of production: 2012
Thu 20 2022 car model: Kia , car motor: 1500 , car color: red , used: no , year of production: 2010
Thu 20 2022 price: 150, car model: GMC , car color: purple , car motor: 3500 , year of production: 2010
Run Code Online (Sandbox Code Playgroud)
我正在寻找 grep/awk (或 freebsd 11 上可用的其他实用程序),它将查找/打印以下条件评估为 TRUE 的每一行:
Phrase "car motor:" followed by a space and then a numerical value greater than 2000
Run Code Online (Sandbox Code Playgroud)
这样的 grep/awk 预计会从文本文件中找到/打印以下行:
Tue 18 2022 car model: Toyota , car motor: 2001 , car color: blue , year of production: 2018
Thu 19 2022 car model: Mercedes , car color: black , year of production: 2012 , car motor: 4000
Thu 20 2022 price: 150, car model: GMC , car color: purple , car motor: 3500 , year of production: 2010
Run Code Online (Sandbox Code Playgroud)
gle*_*man 14
我认为 perl 将在 freebsd 上可用,并且您的要求可以直接转换:
perl -ne 'print if /car motor: (\d+)/ and $1 > 2000' file
Run Code Online (Sandbox Code Playgroud)
Ed *_*ton 10
使用 GNU awk 将第三个参数匹配到 match():
$ awk 'match($0,/car motor: ([0-9]+)/,a) && (a[1] > 2000)' file
Tue 18 2022 car model: Toyota , car motor: 2001 , car color: blue , year of production: 2018
Thu 19 2022 car model: Mercedes , car color: black , year of production: 2012 , car motor: 4000
Thu 20 2022 price: 150, car model: GMC , car color: purple , car motor: 3500 , year of production: 2010
Run Code Online (Sandbox Code Playgroud)
或使用任何 awk:
$ awk 'match($0,/car motor: [0-9]+/) && (substr($0,RSTART+11) > 2000)' file
Tue 18 2022 car model: Toyota , car motor: 2001 , car color: blue , year of production: 2018
Thu 19 2022 car model: Mercedes , car color: black , year of production: 2012 , car motor: 4000
Thu 20 2022 price: 150, car model: GMC , car color: purple , car motor: 3500 , year of production: 2010
Run Code Online (Sandbox Code Playgroud)
或者也可以使用任何 awk,但更神秘一点:
$ awk '{k=$0} sub(/.*car motor: /,"",k) && (k > 2000)' file
Tue 18 2022 car model: Toyota , car motor: 2001 , car color: blue , year of production: 2018
Thu 19 2022 car model: Mercedes , car color: black , year of production: 2012 , car motor: 4000
Thu 20 2022 price: 150, car model: GMC , car color: purple , car motor: 3500 , year of production: 2010
Run Code Online (Sandbox Code Playgroud)