我知道这会打印出 IP 和用户名,但有人能帮我简单解释一下吗,谢谢!unix
w -hs|awk '{printf "%s\t%s\n",$1,$3}'
答案1
w -hs
- 这会打印谁已登录系统,但正在使用-hs使输出更干净的标志
然后将结果通过w -hs
管道传输到awk
用于printf
格式化输出的对象。
%s
是格式说明符,\t
表示 TAB。\n
代表换行符。在这些之后,我们有$1
和$3
。所以这整件事awk '{printf "%s\t%s\n",$1,$3}'
意味着打印输出中的第一个和第三个字符串,在它们之间放置一个制表符并在换行符上打印结果
对我来说,这与使用相同awk '{print $1, "", $3}'
答案2
分解一下:
首先注意“管道”符号|
。这告诉我们这是一个两部分命令:输出第一个命令的内容w -hs
被“传送”到第二个命令awk '{printf "%s\t%s\n",$1,$3}'
以进行进一步处理。
第一个命令w -hs
输出有关谁登录到系统的信息(man w
有关详细信息,请参阅 参考资料)。在本例中,添加了两个选项-h
和-s
来格式化输出。有关详细信息,请参阅COMMAND-LINE OPTIONS
中的部分man w
。更好的是,在终端中输入此命令并检查它。
的输出w -hs
被“管道”到awk
,这意味着它将awk
对 的输出进行操作w -hs
。
awk
是一种通常用于文本处理的语言;请参阅man awk
详细信息,或从互联网上无数的教程之一awk
了解更多信息。awk
代码是相当稠密,并且理解它可能需要一些研究。
这表达 '{printf "%s\t%s\n",$1,$3}'
告诉awk
我们如何处理从管道传输到它的数据w -hs
。总之,这些说明是:
使用printf
,将字段(或列)1 和 3 ( ) 中的值打印为由制表符 ( ) 分隔的$1,$3
“字符串”( ),然后在末尾添加“换行符”( )。%s
\t
\n
请注意,这是一个简短的总结awk
,省略了许多重要的细节。如果您的兴趣或工作描述需要更详细地了解awk
,请参阅各种在线资源或硬拷贝资源。