awk 带有意外换行符的特定列

pul*_*umo 1 awk df

我似乎无法找到解决方案,这让我发疯。我知道我可以awk用来打印一列。由于我的文件系统的排列方式,我在打印特定列时遇到了问题。

这是我运行时所拥有的df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg_root-root
                      36623968   4484592  30278976  13% /
tmpfs                   961312         0    961312   0% /dev/shm
/dev/sda1               516040    102896    386932  22% /boot
Run Code Online (Sandbox Code Playgroud)

如果 Iawk对于 1K-blocks 列,由于文件系统位置的长度,它会从其他列返回值。基本上会发生这种情况:

1K-blocks

4484596
961312
516040
Run Code Online (Sandbox Code Playgroud)

如何列出正确的列信息?

Gil*_*il' 6

如果您要通过管道df输入awk,请df -P改用管道。它旨在易于解析,特别是不会断行。请记住跳过标题行 ( NR >= 2)。

如果你需要用奇怪的换行符解析一些现有的输出,你可以告诉一个续行,因为它以空格开头。

awk '
  NR==1 {next}
  /^ / {print $1}
  !/^ / {print $2}
'
Run Code Online (Sandbox Code Playgroud)

但是请注意,存在文件系统名称可以包含空格的 unix 变体(至少是 OSX——如果它是唯一一个在实践中发生这种情况,我不会感到惊讶),这使得任何基于列的解析都有问题(不幸的是,df -P不使用制表符)。