我有一个文件,其中包括虚拟机在管理程序中运行的详细信息。我们运行一些命令并将输出重定向到一个文件。以及以下格式提供的is数据。
Virtual Machine : OL6U5
ID : 0004fb00000600003da8ce6948c441bb
Status : Running
Memory : 65536
Uptime : 17835 Minutes
Server : MyOVS1.vmorld.com
Pool : HA-POOL
HA Mode: false
VCPU : 16
Type : Xen PVM
OS : Oracle Linux 6
Virtual Machine : OL6U6
ID : 0004fb00000600003da8ce6948c441bc
Status : Running
Memory : 65536
Uptime : 17565 Minutes
Server : MyOVS2.vmorld.com
Pool : NON-HA-POOL
HA Mode: false
VCPU : 16
Type : Xen PVM
OS : Oracle Linux 6
Virtual Machine : OL6U7
ID : 0004fb00000600003da8ce6948c441bd
Status : Running
Memory : 65536
Uptime : 17835 Minutes
Server : MyOVS1.vmorld.com
Pool : HA-POOL
HA Mode: false
VCPU : 16
Type : Xen PVM
OS : Oracle Linux 6由于在某些虚拟机监控程序上运行了50 + vms,所以这种输出因系统管理程序而不同。上面的文件只是虚拟机管理程序中的一个示例,我们只有3个VM在运行,因此重定向的文件应该包含关于几个VM(N个VM)的信息。
我们需要使用awk/sed或使用shell脚本以以下格式获取这些详细信息
Virtual_Machine ID Status Memory Uptime Server Pool HA VCPU Type OS
OL6U5 0004fb00000600003da8ce6948c441bb Running 65536 17835 MyOVS1.vmworld.com HA-POOL false 16 Xen PVM Oracle Linux 6
OL6U6 0004fb00000600003da8ce6948c441bc Running 65536 17565 MyOVS2.vmworld.com NON-HA-POOL false 16 Xen PVM Oracle Linux 6
OL6U5 0004fb00000600003da8ce6948c441bd Running 65536 17835 MyOVS1.vmworld.com HA-POOL false 16 Xen PVM Oracle Linux 6发布于 2016-01-28 20:27:45
编辑:在一个简单的一行for循环中,可扩展到任意数量的输出行:
for ((i=1;i<=2;i++)); do cut -d: -f "$i" input | paste -sd: ; done | column -t -s:您可以使用bash进程替换作为一个一行程序来完成此操作:
paste -sd: <(cut -d: -f1 input) <(cut -d: -f2 input) | column -t -s:-s选项paste使它一次处理每个文件。:在paste中设置的分隔符在最后被-s选项“捕捉”到column,以便通过使字段对齐来修饰格式。
两个进程替换中的cut命令分别提取第一个字段和第二个字段。
输入中是否有空行并不重要,因为column -t -s:会清除输出。(在问题中指定的原始输入中有空行,但从那以后它们就被删除了。无论空行如何,上面的命令都可以工作。)
输入-上述命令中名为“输入”的文件的内容:
Virtual_Machine:OL6U7
ID:0004fb00000600003da8ce6948c441bd
Status:Running
Memory:65536
Uptime:17103
Server:MyOVS1.vmworld.com
Pool:HA-POOL
HA:false
VCPU:16
Type:Xen PVM
OS:Oracle Linux 6输出:
Virtual_Machine ID Status Memory Uptime Server Pool HA VCPU Type OS
OL6U7 0004fb00000600003da8ce6948c441bd Running 65536 17103 MyOVS1.vmworld.com HA-POOL false 16 Xen PVM Oracle Linux 6发布于 2017-07-20 18:32:47
cat <(head -n 11 virtual.txt | cut -d: -f1) <(sed 's/.*: //' virtual.txt) | xargs -d '\n' -n 11 | column -t
在这种情况下,每个虚拟机的行数是硬编码的- 11行。在此情况下,最好先将其计数并存储到变量中,然后在代码中使用此变量。
cat <(command 1) <(command 2) - <()结构使command输出显示为临时文件。因此,cat将两个文件连接起来,并将其进一步管道化。head -n 11 virtual.txt | cut -d: -f1,为我们提供未来的列标题。一个虚拟机条目是前11行,使用head命令来获取它。cut将该条目拆分为两列,并打印唯一的第一列。sed 's/.*: //' virtual.txt -给出未来的列值。sed删除所有不需要的文本,只留下值。xargs -d '\n' -n 11。每个输入项都以换行符结束。此命令获取项,并按每行11次打印它们。column -t -是漂亮的打印显示器所需要的.它以表格形式显示我们的行。否则,每一行将是不同的宽度。Virtual Machine ID Status Memory Uptime Server Pool HA Mode VCPU Type OS
OL6U5 0004fb00000600003da8ce6948c441bb Running 65536 17835 Minutes MyOVS1.vmorld.com HA-POOL false 16 Xen PVM Oracle Linux 6
OL6U6 0004fb00000600003da8ce6948c441bc Running 65536 17565 Minutes MyOVS2.vmorld.com NON-HA-POOL false 16 Xen PVM Oracle Linux 6
OL6U7 0004fb00000600003da8ce6948c441bd Running 65536 17835 Minutes MyOVS1.vmorld.com HA-POOL false 16 Xen PVM Oracle Linux 6https://unix.stackexchange.com/questions/258361
复制相似问题