使用Awk匹配一个单词,然后找到另一个单词的第一个出现



我正在尝试找到一种方法来搜索我已经有匹配后的另一个匹配单词。

我专门试图获得我的一台监视器的亮度价值。例如,我的xrandr --verbose输出的一部分是:

DP-1 connected 1920x1080+1920+0 (0x6e) normal (normal left inverted right x axis y axis) 598mm x 336mm
    Identifier: 0x46
    Timestamp:  73906594
    Subpixel:   horizontal rgb
    Gamma:      1.0:1.0:1.0
    Brightness: 1.0
    Clones:    
    CRTC:       1

我想寻找连接的单词,然后首先出现亮度。

我尝试过哪种有效的方法:

xrandr --verbose | awk '/ connected /{print $1}/Brightness:/{print $2}'

给我以下输出,因为我有两个显示器:

LVDS-1                                                                      
1.0
DP-1
1.0

,但是假设我只想为结果进行第一次出现,那么我已经尝试过:

 xrandr --verbose | awk '/LVDS-1/{getline; getline; getline; getline; getline; print$0}'

按预期工作,为我提供了此特定监视器的亮度值。

,但我不确定亮度值是否总是在5行上。所以我正在寻找一个更强大的解决方案。

awk 解决方案:

xrandr --verbose | awk '/LVDS-1/{f=1}/Brightness:/ && f{print $2; exit}'

  • /LVDS-1/{f=1}-遇到所需的 LVDS-1 set flag f=1

  • /Brightness:/ && f-遇到使用Brightness:的最接近行和Active Flag f(对于LVDS-1(时 - 打印值,exit立即执行脚本(避免冗余迭代(

如果我理解正确,您想打印特定监视器的亮度。假设那是LVDS-1。然后,您可以使用变量来检查您在xrandr输出的正确"部分"中,并代码类似:

xrandr --verbose | awk '/ connected / { if ( $1 == "LVDS-1" ) { print $1; print_brightness = 1; } } /Brightness: / { if (print_brightness) { print $2; print_brightness = 0; } }'

xrandr --verbose | awk '/connected/,0 { if( /Brightness:/ ) { print $2; exit } }'

范围表达式0被解释为false,这意味着一旦启动范围的模式(/connected/(匹配范围。

相关内容

  • 没有找到相关文章

最新更新