首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获文件头,然后对原始文件进行进一步的文本处理?

如何捕获文件头,然后对原始文件进行进一步的文本处理?
EN

Stack Overflow用户
提问于 2019-06-07 20:07:37
回答 4查看 55关注 0票数 0

我想捕获以下文件的前8行,然后捕获NPU #等于7或3,NPU core等于1的所有字段。

代码语言:javascript
复制
RP/0/RP0/CPU0:xxxxx#show controllers npu voq-usage interface all instance all location 0/0/CPU0
33144 Tue Jun  4 xxxx
33145 -------------------------------------------------------------------
33146 Node ID: 0/0/CPU0
33147 Intf         Intf     NPU NPU  PP   Sys   VOQ   Flow   VOQ    Port
33148 name         handle    #  core Port Port  base  base   port   speed
33149 (hex)                                     type
33150 ----------------------------------------------------------------------
33151 Hu0/0/2/1    210       0   1   21    21   1024   4152 local   100G
33152 Hu0/0/2/47   218       7   0    1   701   1032   4152 local   100G
33153 Hu0/0/2/46   220       7   0    5   705   1040   4216 local   100G
33154 Hu0/0/2/45   228       7   0    9   709   1048   4280 local   100G
33155 Hu0/0/2/44   230       3   1   17   717   1056   4152 local   100G

我可以使用以下完全不同的awk命令来完成此操作:

代码语言:javascript
复制
awk 'NR<9' filename.txt
awk '($4==7||$4==3) && $5==1' filename.txt

我能得到一些关于如何将这些awk语句连接在一起的建议吗?或者甚至可能是一种更优雅的狂欢主义来实现这一点?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-07 20:46:20

代码语言:javascript
复制
awk '(NR<9) || (($4~/^[73]$/) && ($5==1))' filename.txt
票数 1
EN

Stack Overflow用户

发布于 2019-06-07 20:12:29

我建议使用||运算符,并对第二个条件进行分组:

代码语言:javascript
复制
awk 'NR<9 || (($4==7||$4==3) && $5==1)' filename.txt > newfilename.txt

请参阅online demo

代码语言:javascript
复制
s="RP/0/RP0/CPU0:xxxxx#show controllers npu voq-usage interface all instance all location 0/0/CPU0
33144 Tue Jun  4 xxxx
33145 -------------------------------------------------------------------
33146 Node ID: 0/0/CPU0
33147 Intf         Intf     NPU NPU  PP   Sys   VOQ   Flow   VOQ    Port
33148 name         handle    #  core Port Port  base  base   port   speed
33149 (hex)                                     type
33150 ----------------------------------------------------------------------
33151 Hu0/0/2/1    210       0   1   21    21   1024   4152 local   100G
33152 Hu0/0/2/47   218       7   0    1   701   1032   4152 local   100G
33153 Hu0/0/2/46   220       7   0    5   705   1040   4216 local   100G
33154 Hu0/0/2/45   228       7   0    9   709   1048   4280 local   100G
33155 Hu0/0/2/44   230       3   1   17   717   1056   4152 local   100G"

awk 'NR<9 || (($4==7||$4==3) && $5==1)'  <<< "$s"

输出:

代码语言:javascript
复制
RP/0/RP0/CPU0:xxxxx#show controllers npu voq-usage interface all instance all location 0/0/CPU0
33144 Tue Jun  4 xxxx
33145 -------------------------------------------------------------------
33146 Node ID: 0/0/CPU0
33147 Intf         Intf     NPU NPU  PP   Sys   VOQ   Flow   VOQ    Port
33148 name         handle    #  core Port Port  base  base   port   speed
33149 (hex)                                     type
33150 ----------------------------------------------------------------------
33155 Hu0/0/2/44   230       3   1   17   717   1056   4152 local   100G
票数 2
EN

Stack Overflow用户

发布于 2019-06-07 20:15:19

你能再试一种方法吗?

代码语言:javascript
复制
awk 'NR<=9{print;next} ($4==7||$4==3) && $5==1'  Input_file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56494026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档