我有 2 个文件,我目前在 awk 中处理每个文件:
=======================文件1:===================
0x0002 RUNNING EXISTS foo 253 65535
0x0003 RUNNING EXISTS foo 252 5
0x0004 RUNNING EXISTS foo 251 3
我对第一个字段和最后一个字段感兴趣。
字段 1:vdisk(十六进制)。最后两个字段是每个虚拟磁盘可能的 Cdisk。至少 1 必须存在。值是十进制的。如果出现数字“65535”,则表示第二个cdisk不存在。
我使用这个 awk 来显示一个用户友好的表格:
awk 'BEGIN {print "vdisk cdisk Mr_cdisk"}
{
if ( $3 ~ /EXISTS|THIS_AGENT_ONLINE/ ) {
sub("65535", "N/A")
printf "%-11s %-6s %s\n",$1,$(NF-1),$(NF)
}
}' ${FILE}
将产生这张表:
vdisk cdisk Mr_cdisk
0x0002 253 N/A
0x0003 252 5
0x0004 1 3
======================= 文件2:===================
0x0000 Cmp cli Foo 0 SOME 0 0x0 0x0 0x0
0x0001 Cmp own Foo 1 NONE 0 0x0 0x0 0x0
0x0002 Cmp cli Foo 0 SOME 0 0x0 0x1 0x0
0x0003 Cmp own Foo 0 NONE 0 0x0 0x0 0x1
0x0004 Cmp cli Foo 0 SOME 0 0x0 0x0 0x0
0x0005 Cmp own Foo 1 NONE 0 0x1 0x0 0x0
我对“Cmp own”行感兴趣,其中第一个字段是 Cdisk(十六进制)。从末尾算起的第 5 个字段(就在 SOME/NONE 文本之前)是实例编号。它是 0 或 1。我使用这个 awk 来显示一个用户友好的表格:
awk 'BEGIN {print "cdisk(hex) RACE_Instance"}
/Cmp own/ {
printf "%-11s %-10s\n",$1,$(NF-5)
}' ${FILE};
这将产生下表:
cdisk(hex) Instance
0x0001 1
0x0003 0
0x0005 1
++++++++++++++++++++++++++++++++++++++++++
我想显示什么合并表。最好直接来自原始文件。它应该将第一个数据分成 2 行(如果有超过 1 个 cdisk)。这将是合并的基础。然后打印实例编号(如果每个此 cdisk 存在)。
vdisk(hex) cdisk(hex) Instance
0x0002 0x00fd N/A
0x0003 0x00fc N/A
0x0003 0x0005 1
0x0004 0x0001 0
0x0004 0x0003 1
我肯定更喜欢 awk 的解决方案。:)
谢谢!
编辑:向一个数据表添加了更多信息和更正。
EDIT2:简化输入