我的文件说'file.txt‘有下面的内容,
---
controller-name: RAID-1
host-power: on
has-error: No
info-valid: Yes
controller-health: Good
---
controller-name: RAID-2
host-power: on
has-error: No
info-valid: Yes
controller-health: Bad
...我想使用---作为每个控制器的分隔符来提取行。类似控制器的东西会给我第一个控制器和第二个控制器的controller1的详细信息。
我试着搜索,但没有找到任何相关的答案。
发布于 2017-11-07 18:04:08
使用awk
基于一些假设,下面两个示例可以用来逐一搜索控制器配置,如果这不是您要编辑的配置,请您的问题并清楚地向我们介绍。
任一
# which will print and exit
# search for controller-name, increment variable
# print contents and exit
awk -v controller=1 '
f && /^---/{exit}
/^controller-name/{c++}
f=c==controller
' infile或
# which will save inside array
# used --- as row separator
# whenever controller-name awk finds, that line is saved in array
# in end block access it by a[0], a[1]....
awk -v RS='---' '
/controller-name:/{
gsub(/^\n|\n$/,"");
a[c++]=$0
}
END{
print a[0]
}
' infile测试结果:
输入:
$ cat infile
---
controller-name: RAID-1
host-power: on
has-error: No
info-valid: Yes
controller-health: Good
---
controller-name: RAID-2
host-power: on
has-error: No
info-valid: Yes
controller-health: Bad
...输出-1:
$ awk -v controller=1 'f && /^---/{exit}/^controller-name/{c++}f=c==controller' infile
controller-name: RAID-1
host-power: on
has-error: No
info-valid: Yes
controller-health: Good
$ awk -v controller=2 'f && /^---/{exit}/^controller-name/{c++}f=c==controller' infile
controller-name: RAID-2
host-power: on
has-error: No
info-valid: Yes
controller-health: Bad
...输出-2:
$ awk -v RS='---' '/controller-name:/{gsub(/^\n|\n$/,"");a[c++]=$0}END{print a[0]}' infile
controller-name: RAID-1
host-power: on
has-error: No
info-valid: Yes
controller-health: Good
$ awk -v RS='---' '/controller-name:/{gsub(/^\n|\n$/,"");a[c++]=$0}END{print a[1]}' infile
controller-name: RAID-2
host-power: on
has-error: No
info-valid: Yes
controller-health: Bad
...https://stackoverflow.com/questions/47153590
复制相似问题