[英]awk or sed command to extract lines based on a delimiter from a text file
My file say 'file.txt' has below content, 我的文件说“ 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
...
I would like to extract lines using ---
as the delimiter for each controller. 我想使用
---
作为每个控制器的分隔符来提取行。 Something like controller[0] will give me details of 1st controller and controller[1] of 2nd controller. 像controller [0]这样的东西会给我第一控制器和第二控制器的详细信息。
I tried to search but could not find any relevant answer. 我尝试搜索,但找不到任何相关答案。
Using awk
使用
awk
Based on some assumption, below 2 examples can be used to search controller config one by one, if this isn't a one which you are looking for edit, your question and brief us clearly. 基于某种假设,下面的两个示例可用于一个一个地搜索控制器配置,如果这不是您要编辑的一个,请提出问题并清楚地向我们介绍。
Either 要么
# 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
Or 要么
# 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
Test Results: 检测结果:
Input: 输入:
$ 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
...
Output-1: 输出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
...
Output-2: 输出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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.