You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中使用cut命令提取last输出信息异常的原因咨询

为什么cut命令输出错误,而awk能正确提取字段?

这问题我之前排查系统日志时也踩过一模一样的坑!核心差异完全在于两个命令对字段分隔符的处理逻辑不一样,咱们来掰扯清楚:

1. 先搞懂last -i的输出格式

last -i的输出里,各个字段之间是用连续的多个空格来分隔的,而不是制表符(Tab)。你可以执行last -i | grep 'Jan 12' | head -1仔细观察,会发现用户名和终端、终端和IP之间是好几串空格,根本没有单个Tab字符。

2. cut -f1,3为啥失效?

cut命令的默认字段分隔符是制表符(Tab),它只会认Tab来分割字段。而last的输出里完全没有Tab,所以cut会把整行内容当成一个完整的字段,自然就直接输出整行结果了。

就算你手动指定分隔符为空格(cut -d' ' -f1,3),照样会出问题——因为cut是按单个字符来分割的,连续的多个空格会被当成多个分隔符,导致字段错位。比如两个空格之间会被算作一个空字段,这样-f3可能拿到的就是空内容,根本不是你要的IP。

3. awk为啥能正常工作?

awk的默认字段分隔符是任意数量的空白字符(包括连续空格、Tab、换行等),它会自动忽略连续的空白,把非空白的连续内容当成一个独立字段。不管last输出里有多少个空格,awk都能精准识别出第1个字段(用户名)和第3个字段(IP),所以awk '{print $1, $3}'能得到正确结果。

小验证方法

你可以用这个命令查看last输出的原始字符,直观看到分隔符是空格而非Tab:

last -i | grep 'Jan 12' | head -1 | od -c

内容的提问来源于stack exchange,提问作者Bhawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:56:13