我正在尝试从他们登录系统的位置获取用户名和IP。
我使用了以下命令:
last -i | grep 'Jan 12' | cut -f1,3
但结果我得到了全线。
但是当我使用awk时:
last -i | grep 'Jan 12' | awk '{print $1, $3}'
我得到了正确的结果。
为什么在cut命令的情况下输出错误?
任何帮助都将受到高度赞赏。
答案 0 :(得分:4)
cut
的默认分隔符是一个选项卡,而awk
中的默认输入字段分隔符是任何空格,即空格或制表符。
要在cut
中获得相同的行为,您需要在-d ' '
中添加cut
来制作它:
last -i | grep 'Jan 12' | tr -s ' ' | cut -d ' ' -f1,3
tr -s ' '
需要将多个空格压缩到一个空格中。
但是,使用awk
可以完全跳过grep
并使用:
last -i | awk '/Jan 12/{print $1, $3}'
答案 1 :(得分:0)
在cut
中,默认分隔符为[Tab]
。同样使用-d
键,您只能将单个字符指定为分隔符。
在last
输出中,连续有8个空格。
因此,最好的方法是在示例中使用awk
。
糟糕,但有切割的工作解决方案:
last | grep 'Jun 23' | sed 's/\s\s*/ /g' | cut -d' ' -f1,3