sed - sed 多行打印制表符分隔
问题描述
我想使用sed从命令输出中提取index number、username、IP address和last use elapsed time,如下所示:
smb:usersArray:_array_index:5:lastUseElapsedTime = 214
smb:usersArray:_array_index:5:minsToDisconnect = 0
smb:usersArray:_array_index:5:sessionType = "tcp"
smb:usersArray:_array_index:5:serviceType = "smb"
smb:usersArray:_array_index:5:ipAddress = "192.168.168.1"
smb:usersArray:_array_index:5:sessionID = 9188440707059155379
smb:usersArray:_array_index:5:loginElapsedTime = 3897
smb:usersArray:_array_index:5:disconnectID = 9188440707059155379
smb:usersArray:_array_index:5:name = "DOMAIN\username1"
smb:usersArray:_array_index:5:flags = 0
smb:usersArray:_array_index:6:lastUseElapsedTime = 3772
smb:usersArray:_array_index:6:minsToDisconnect = 0
smb:usersArray:_array_index:6:sessionType = "tcp"
smb:usersArray:_array_index:6:serviceType = "smb"
smb:usersArray:_array_index:6:ipAddress = "192.168.168.2"
smb:usersArray:_array_index:6:sessionID = 9188440707059155380
smb:usersArray:_array_index:6:loginElapsedTime = 3783
smb:usersArray:_array_index:6:disconnectID = 9188440707059155380
smb:usersArray:_array_index:6:name = "DOMAIN\username2"
smb:usersArray:_array_index:6:flags = 0
...并打印一个制表符分隔的输出,如下所示:
5<tab>192.168.168.1<tab>username1<tab>214
6<tab>192.168.168.2<tab>username2<tab>3772
....
我怎样才能做到这一点?
解决方案
awk 来救援
awk -F":| = " '{gsub(/"/,"");gsub(/DOMAIN\\/, "")};$5~/ipAddress/{ip[$4]=$6} $5~/name/{name[$4]=$6} $5~/lastUseElapsedTime/{time[$4]=$6} END{for(e in time){print e, ip[e], name[e], time[e]}}' OFS="\t" file
或者通过模拟多维数组:
awk -F":| = " '{gsub(/"/,"");gsub(/DOMAIN\\/, "")}{id[$4]=1;r[$4 $5]=$6}END{for(e in id){print e, r[e "ipAddress"], r[e "name"], r[e "lastUseElapsedTime"]}}' OFS="\t" file
(很想使用这个:https ://www.gnu.org/software/gawk/manual/html_node/Arrays-of-Arrays.html但不适用于我的 awk 版本)
输出 :
5 192.168.168.1 username1 214
6 192.168.168.2 username2 3772
推荐阅读
- python - 如何比较字典中每个键中的列表之间的浮点值?
- python - 单元测试;如何模拟一个将要传递给 Python 函数的类对象?
- android - Android CallScreeningService 提供来电显示
- html - 视频标签上的曲目始终显示“从带有 URL 的框架中加载 URL 的尝试不安全
- jetty - 是否可以在 Jetty 中使用 InetAccessHandler 以及 X-Forwarded-For 标头?
- javascript - 如何在响应ajax jquery后创建数据表
- angularjs - 如何解决 Angular cli 中的引导程序问题
- git - 如何git忽略特定的无扩展名文件
- node.js - 如果循环多次,则递归函数内的循环失败
- html - 为图像制作波浪效果