如何使用awk命令获取数据中的空值

时间:2018-06-19 17:58:35

标签: awk sed

我有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

请帮助我。 也欢迎任何其他可能的方式。谢谢。

1 个答案:

答案 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粘合在一起。

我只需要搜索和阅读一些信息,但是所有有关此问题的答案都在互联网上。