匹配结果并在空格之前显示文本

时间:2017-02-01 12:41:32

标签: awk sed

更确定如何在比赛前显示结果。我可以做一个简单的grep并显示匹配' LLLLL'的行。如何在返回前显示标题。谢谢你的帮助。

数据

switch-031
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.1.14 = STRING: "switch-031"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.1.15 = STRING: "switch-032"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.7.28 = STRING: "switch-033"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.9.29 = STRING: "switch-034"

switch-041
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.10035.13 = STRING: "switch-044"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.10035.15 = STRING: "switch-043"

switch-051
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.8.2 = STRING: "switch-053"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.10.1 = STRING: "switch-054"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.1.3 = STRING: "switch-052_LLLLL"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.12.5 = STRING: "switch-055"
.1.3.6.1.4.1.9.9.23.1.2.1.1.6.12.6 = STRING: "switch-056"

结果

switch-051
"switch-052_LLLLL"

3 个答案:

答案 0 :(得分:3)

$ awk 'NF==1{h=$1} /LLLLL/{print h ORS $NF}' file
switch-051
"switch-052_LLLLL"
    标题记录中的
  • NF==1 { h=$1 }会记住标题h
  • /LLLLL/ { print h ORS $NF }LLLLL条记录上打印标题h和最后一个字段$NF

答案 1 :(得分:2)

另一种选择awk

 awk -v RS= '{for(i=1; i<=NF; i++) 
               if($i~/LLLLL/) {print $1; print $i; exit}}' file

switch-051
"switch-052_LLLLL"

答案 2 :(得分:0)

卡拉克法的答案很棒。

你也可以使用perl:

$ perl -ne 'BEGIN{ $/ = "" } print "$1\n$2" if /^(\S+).*?("[^"]+LLLLL")/s' file
switch-051
"switch-052_LLLLL"