如何在awk中用空格或制表符分隔字段

rɑː*_*dʒɑ 73 command-line awk text-processing

在玩的时候awk我来执行:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;
Run Code Online (Sandbox Code Playgroud)

这给出了如下输出:

53277-rw-------
52347-rw-------
Run Code Online (Sandbox Code Playgroud)

我怎样才能在这两个输出朋友之间留一个空格?

dev*_*av2 98

只需将行更改为

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;
Run Code Online (Sandbox Code Playgroud)

这应该用空格打印输出。

希望这可以帮助。

编辑:

正如McNisse建议的那样,您可以使用 printf,这将为您提供良好的输出格式

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;
Run Code Online (Sandbox Code Playgroud)

  • `printf` 函数提供了更好的控制,特别是如果你想格式化数字。`printf("%s\t%s\n", $5, $1)` (7认同)

gle*_*man 83

另一种特定于 awk 的技术,使用“输出字段分隔符”

ls -la | awk -v OFS='\t' '{print $5, $1}'
Run Code Online (Sandbox Code Playgroud)

逗号在这里很重要。


bec*_*cko 20

获取标签的简单方法是:

awk {'print $5"\t"$1'}
Run Code Online (Sandbox Code Playgroud)


小智 6

我知道这是一个旧线程,但我只是在学习,发现这些帖子很有帮助。我最好的解决方案是使用 gawk 为您在变量之间插入空格。

ls -la | gawk '{print $1, $9}'
Run Code Online (Sandbox Code Playgroud)

  • -1:没有什么新鲜事。`gawk`、`mawk` 或任何其他 `awk`,如果您使用逗号,它们都会插入空格,这就是 [this answer](http://askubuntu.com/a/232037/158442) 所说的。 (3认同)

ken*_*orb 6

要在参数之间添加空格,只需添加" ",例如awk {'print $5" "$1'}

但是,不建议解析command的输出ls,因为它不可靠,并且输出是针对人类的,而不是针对脚本的。因此,请使用替代命令,例如findstat

这是使用 GNU 的示例stat

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096
Run Code Online (Sandbox Code Playgroud)

它将打印您机器友好的输出(以简洁的形式),这样您就可以获得您所需要的内容。然后使用-c使用特定格式,或使用awk,cutread来获取正确的列。

检查stat --help更多选项。例如要打印修改日期,请检查此示例