Bash:获取制表符分隔行表的列

时间:2017-09-24 01:05:28

标签: bash awk

last | head -1向我提供了一系列有关我系统上次登录的信息。它看起来像这样:

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

我想使用bash命令提取此登录的IP地址和时间(也许是awk?)我该怎么做?最后,我应该以{{1​​}}

结束

3 个答案:

答案 0 :(得分:3)

您不需要headawk一起使用,因为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}'

说明:使用last命令获取系统的登录详细信息,然后使用pipe(|)将其标准输出用作awk命令的标准输入。现在在awk命令中FNR == 1确保它应该在第一行运行,所以当这个条件成立时,然后打印该行的第3,第4,第5,第6和第7个字段。

PS:此外,如果您只需要读取最后一次登录,那么我相信您可以使用{print $3,$4,$5,$6,$7;exit},这样它就不会读取最后一个命令的所有行,而且会有点更快。

答案 1 :(得分: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之间放了三个空格,因为这样就是您的示例输出中的内容。

答案 2 :(得分:0)

也许是这样的:

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

其中tr -s将多个空格压缩为一个,cut打印字段3到7。