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)
gle*_*man 83
另一种特定于 awk 的技术,使用“输出字段分隔符”
ls -la | awk -v OFS='\t' '{print $5, $1}'
Run Code Online (Sandbox Code Playgroud)
逗号在这里很重要。
小智 6
我知道这是一个旧线程,但我只是在学习,发现这些帖子很有帮助。我最好的解决方案是使用 gawk 为您在变量之间插入空格。
ls -la | gawk '{print $1, $9}'
Run Code Online (Sandbox Code Playgroud)
要在参数之间添加空格,只需添加" ",例如awk {'print $5" "$1'}。
但是,不建议解析command的输出ls,因为它不可靠,并且输出是针对人类的,而不是针对脚本的。因此,请使用替代命令,例如find或stat。
这是使用 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,cut或read来获取正确的列。
检查stat --help更多选项。例如要打印修改日期,请检查此示例。