我正在尝试捕获“许可证名称”、“用户”、“许可证总数”、“使用的许可证数量”、“到期日期”、“许可证签出日期”、“服务器名称”的值以下输出:
Users of avy_amba_portfolio: (Total of 21 licenses issued; Total of 5 licenses in use)
"avy_amba_portfolio" v1.5, vendor: AVERYDES, expiry: 30-apr-2024
user1 server1 /dev/pts/5 (v0.20220708) (license_server_1/1234 3402), start Tue 3/5 22:22
user1 server6 /dev/pts/22 (v0.20220708) (license_server_1/1234 488), start Wed 3/6 1:19
user1 server1 /dev/pts/80 (v0.20220708) (license_server_1/1234 3554), start Wed 3/6 23:55
user1 server1 /dev/pts/83 (v0.20220708) (license_server_1/1234 5850), start Thu 3/7 0:03
user2 server1 /dev/pts/47 (v0.20220920) (license_server_1/1234 1713), start Thu 3/7 3:10
Users of avy_jtag: (Total of 6 licenses issued; Total of 1 license in use)
"avy_jtag" v1.5, vendor: AVERYDES, expiry: 30-apr-2024
user1 server6 /dev/pts/22 (v0.20220708) (license_server_1/1234 1491), start Wed 3/6 1:19
我正在使用以下命令:
awk 'BEGIN { printf "%-20s%-20s%-30s%-25s%-20s%-30s%-20s\n",
"License Name", "User", "Total Number of Licenses", "Number of license used", "Expiry Date", "License Checkout Date", "Servername" }
/Users of/ { license = $3; totallicense = $6; usedlicense = $11;
getline; getline;
next
}
/expiry/ {
expiry_date = $6; getline; getline; next
}
{ printf "%-20s%-20s%-30s%-25s%-20s%-30s%-20s\n",
license, $1, totallicense, usedlicense, expiry_date, $8" "$9" "$10, $2
}' /root/avery_lic_usage.log
但是,它无法捕获“avy_amba_portfolio”v1.5,供应商:AVERYDES,到期日:30-apr-2024”行上的“到期”日期。以下是命令的示例输出:
License Name User Total Number of Licenses Number of license used Expiry Date License Checkout Date Servername
avy_amba_portfolio: user1 21 5 Tue 3/5 22:22 server1
avy_amba_portfolio: user1 21 5 Wed 3/6 1:19 server6
avy_amba_portfolio: user1 21 5 Wed 3/6 23:55 server1
avy_amba_portfolio: user1 21 5 Thu 3/7 0:03 server1
avy_amba_portfolio: user2 21 5 Thu 3/7 3:10 server1
avy_amba_portfolio: 21 5
avy_jtag: user1 6 1 Wed 3/6 1:19 server6
我怎样才能让它发挥作用?另外,我想删除输出中用户字段中空白的行。
正如评论中提到的,
getline; getline; next
告诉awk
跳过接下来的两行输入,在本例中(第一个getline; getline; next
)意味着expiry
行被忽略。第二个 getline; getline; next
也会引起问题(第一个许可证的 User
值向上移动一位)。
修改输入以提供数据中的一些视觉差异:
$ cat avery_lic_usage.log
Users of avy_amba_portfolio: (Total of 21 licenses issued; Total of 5 licenses in use)
"avy_amba_portfolio" v1.5, vendor: AVERYDES, expiry: 30-apr-2024
user1 server1 /dev/pts/5 (v0.20220708) (license_server_1/1234 3402), start Tue 3/5 22:22
user2 server6 /dev/pts/22 (v0.20220708) (license_server_1/1234 488), start Wed 3/6 1:19
user3 server1 /dev/pts/80 (v0.20220708) (license_server_1/1234 3554), start Wed 3/6 23:55
user4 server1 /dev/pts/83 (v0.20220708) (license_server_1/1234 5850), start Thu 3/7 0:03
user5 server1 /dev/pts/47 (v0.20220920) (license_server_1/1234 1713), start Thu 3/7 3:10
Users of avy_jtag: (Total of 6 licenses issued; Total of 1 license in use)
"avy_jtag" v1.5, vendor: AVERYDES, expiry: 30-may-2024
user6 server6 /dev/pts/22 (v0.20220708) (license_server_1/1234 1491), start Wed 3/6 1:19
如果我们可以依赖感兴趣线的独特模式,就不需要
getline
调用。
一个
awk
想法:
awk '
BEGIN { fmt = "%-20s%-20s%-30s%-25s%-20s%-30s%-20s\n"
printf fmt,
"License Name", "User", "Total Number of Licenses",
"Number of license used", "Expiry Date",
"License Checkout Date", "Servername"
}
/Users of/ { license = $3
totallicense = $6
usedlicense = $11
next
}
/expiry/ { expiry_date = $6
next
}
/license_server_/ { printf fmt,
license, $1, totallicense,
usedlicense, expiry_date,
$8" "$9" "$10, $2
}
' avery_lic_usage.log
这会生成:
License Name User Total Number of Licenses Number of license used Expiry Date License Checkout Date Servername
avy_amba_portfolio: user1 21 5 30-apr-2024 Tue 3/5 22:22 server1
avy_amba_portfolio: user2 21 5 30-apr-2024 Wed 3/6 1:19 server6
avy_amba_portfolio: user3 21 5 30-apr-2024 Wed 3/6 23:55 server1
avy_amba_portfolio: user4 21 5 30-apr-2024 Thu 3/7 0:03 server1
avy_amba_portfolio: user5 21 5 30-apr-2024 Thu 3/7 3:10 server1
avy_jtag: user6 6 1 30-may-2024 Wed 3/6 1:19 server6