bash - 如何捕获文件头,然后对原始文件进行进一步的文本处理?
问题描述
我想捕获以下文件的前 8 行,然后捕获 NPU # 等于 7 或 3 且 NPU core 等于 1 的所有字段。
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 命令来做到这一点:
awk 'NR<9' filename.txt
awk '($4==7||$4==3) && $5==1' filename.txt
我可以就如何将这些 awk 语句加入到一起获得一些建议吗?或者甚至可能更优雅地实现这一目标的bash-ism?
谢谢,
解决方案
我建议使用||
运算符并将第二个条件分组:
awk 'NR<9 || (($4==7||$4==3) && $5==1)' filename.txt > newfilename.txt
查看在线演示:
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"
输出:
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
推荐阅读
- javascript - Django 和 JavaScript:过滤不工作暂停异常
- reactjs - 为什么我在错误中得到空白页,但其他人没有
- r - 合并两个data.frames与r中同一列中的数字和字符
- javascript - 为什么 Promise 中的方法没有括号?
- mysql - 没有限制的 MySQL SELECT 查询
- apache - HTTP 到 HTTPS 重定向问题 POST 方法
- java - 如何删除构造函数中的重复代码?
- dart - Flutter Http Request:响应状态码无效
- c# - “UnityEngine.RuntimePlatform.OSXDashboardPlayer”已过时
- java - ListView / SimpleAdapter 不刷新 - Android