2017-09-24 28 views
-1

last | head -1给我一行关于我系统上次登录的信息。它看起来像这样:Bash:获取制表符分隔的行的列

root  pts/0  123.123.234.321 Sat Sep 23 20:38 still logged in 

我想提取使用bash命令(也许AWK?)我怎么能做到这一点这个登录的IP地址和时间?最后,我应该结束了123.123.234.321 Sat Sep 23 20:38

回答

3

你不需要使用head随着awk,如awk可以通过自身阅读的第一行,你可以请尝试以下,让我知道,如果这可以帮助你。

last | awk 'FNR==1{print $3,$4,$5,$6,$7}' 

OR

last | awk 'FNR==1{print "Server login:",$3,$4,$5,$6,$7;exit}' 

说明:使用最后一个命令来获得对系统的登录信息,然后利用管道(|)使用它的标准输出作为awk命令标准输入。现在在awk命令FNR == 1确保它应该在第一行运行,所以当这个条件成立时,打印该行的第3,4,5,6和7个字段。

PS:此外,如果你需要只读上次登录的话,我相信你可以使用{print $3,$4,$5,$6,$7;exit},这样就不会读最后一个命令的所有行,将是一个有点快了。

+1

谢谢,这并获得成功!现在你知道我如何在前面添加文本,所以输出看起来像'Server login:123.123.234.321 Sat Sep 23 20:38'? – quantumbutterfly

+0

@quantumbutterfly,我现在在OR之后添加了解决方案。请检查它并让我知道这是否有帮助。 – RavinderSingh13

1

你可以把你所拥有的和管它awk,如:

last | head -1 | awk '{print $3 " " $4 " " $5 " " $6 " " $7}' 

样品:

awk '{print $3 " " $4 " " $5 " " $6 " " $7}'<<<'root  pts/0  123.123.234.321 Sat Sep 23 20:38 still logged in' 
123.123.234.321 Sat Sep 23 20:38 

我把$3之间的三个空格和$4,因为这就是您的示例输出中的内容。

0

也许是这样的:

last | head -1 | tr -s ' ' | cut -d' ' -f3-7 

其中tr -s挤压多个空格转换为一个cut印刷领域的3至7

相关问题