我有linux lvs命令样本结果集。我试图使用AWK命令重新排列字段,因为我无法跳过数据中的空值。
LV VG Attr LSize Pool Origin Data% Meta% Move Log
root centos -wi-ao---- 45.62g root Online
swap centos -wi-ao---- root Offline
我尝试了以下命令,
awk '{print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10}' lvs.txt
但是输出是
LV VG Attr LSize Pool Origin Data% Meta% Move Log
root centos -wi-ao---- 45.62g root Online
swap centos -wi-ao---- root Offline
我的预期结果必须是
LV | VG | Attr | LSize | Pool | Origin | Data% | Meta% | Move | Log
root | centos | -wi-ao---- | 45.62g | | root | | | | Online
swap | centos | -wi-ao---- | | | root | | | | Offline
请帮助我。 也欢迎任何其他可能的方式。谢谢。
答案 0 :(得分:0)
解决方案,将awk
与--separator
一起使用,并使用awk -F
(字段分隔符)和printf
格式化输出:
lvs --separator ',' | awk -F ',' '{printf "%-15s| %-10s| %10s| %10s| %10s| %10s| %10s| %10s| %10s|%10s| \n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}'
输出:
LV | VG | Attr| LSize| Pool| Origin| Data%| Meta%| Move| Log|
logicalTest1 | testgroup | -wi-a-----| 1.00g| | | | | | |
logicalTest2 | testgroup | -wi-a-----| 1.00g| | | | | | |
说明
安装了lvm并创建了两个lvs进行测试。
lvs命令产生的输出没有字段分隔符,只是一堆空格。将输出重定向到文件后,我进入了display the spaces:
root@florida:~# cat test2 | tr " " "*"
**Host*******Attr*******KMaj*LSize*OSize*Origin
**florida****-wi-a-----**254*1.00g*************
**florida****-wi-a-----**254*1.00g*************
由于空格不是很好的定界符,在阅读man lvs
之后,我发现它有几个选项可以打印输出,其中一个是--separator
参数,它允许您为每个参数使用个性化分隔符列中,我使用了CSV常用的“,”(逗号)。
然后,寻找用于定界awk
I've found的选项(在其上使用字段分隔符的选项),我将其与此处说明的print formatting粘合在一起。
我只需要搜索和阅读一些信息,但是所有有关此问题的答案都在互联网上。