我正在尝试重新格式化last命令的输出,例如last -adn 10 | head -n -2 | awk -F' {2,}' '{ print "USER:",$1,"IP:",$5 }'.
>> last -adn 10 | head -n -2
root pts/0 Tue Jul 10 13:51 still logged in 10.102.11.34
reboot system boot Fri Jun 22 09:37 (18+04:19) 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
我想我的输出是这样的:
>>last -adn 10 | head -n -2 | awk -F' {2,}' '{ print "USER:",$1,"IP:",$5 }'
USER: root IP: 10.102.11.34 TIME: Tue Jul 10 13:51
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这里描述的每一种方法,我无法弄清楚为什么这对我不起作用.执行该命令时,它只是将整行存储在$ 1中,其他行为空白.
基于 @WilliamPursell 评论/建议的更新:
而不是这个:
awk -F' {2,}' '{ print "USER:",$1,"IP:",$5 }'
Run Code Online (Sandbox Code Playgroud)
尝试这个:
awk 'BEGIN{FS=" *"}{ print "USER:",$1,"IP:",$5 }'
Run Code Online (Sandbox Code Playgroud)
似乎对我有用,并修复了我之前的解决方案的缺点,'BEGIN{FS=" "}...该解决方案仅分割为两个空格。
注意:FS设置为3 个空格和一个*,这意味着最后一个空格可以出现零次或多次。
默认情况下,gawk 不启用区间表达式。您可以使用--re-interval标志启用它们。其他版本的 awk 可能根本不支持它们。
如果您无法启用该标志,则可以使用更明确的匹配。例如:
$ echo 'foo bar baz' |
awk -F'[[:space:]][[:space:]][[:space:]]*' '{print $2}'
bar baz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5797 次 |
| 最近记录: |