使用Awk、shadow和password退出Linux密码

使用Awk、shadow和password退出Linux密码,linux,awk,shadow,passwd,Linux,Awk,Shadow,Passwd,我正在尝试编写一个脚本,输出用户名、实名和帐户删除日期。 这是我目前掌握的代码 awk -F: '$3 > 1000 { print $1, $5 }|grep /etc/shadow (print $9)to_date('1970-01-01','YYYY-MM-DD') + numtodsinterval(1244108886,'SECOND') 输入: smithj:Ep6mckrOLChF.:10063:0:99999:7::: westf:Ep7uopliokmmm.:1058

我正在尝试编写一个脚本,输出用户名、实名和帐户删除日期。 这是我目前掌握的代码

awk -F: '$3 > 1000 { print $1, $5 }|grep /etc/shadow (print $9)to_date('1970-01-01','YYYY-MM-DD') + numtodsinterval(1244108886,'SECOND')
输入:

smithj:Ep6mckrOLChF.:10063:0:99999:7:::
westf:Ep7uopliokmmm.:1058:0:1087654:7:::
martinezj:GHolimpjk90.:1010:0:1008759:7::
输出:

John Smith           Password expires never
Frank West           Password expires: May 8th 2015
Jose Martinez        Password expires: August 12th 2015

假设您有查看卷影文件的权限,这将输出用户名、实名和帐户过期日期,以冒号分隔:

join -t: -o 0,1.5,2.8 <(sort /etc/passwd) <(sort /etc/shadow)

join-t:-o 0,1.5,2.8我认为您希望将grep导入awk。此外,它缺少一个结束“或嵌套”。。。例如:你能解释一下你遇到的问题吗?我只是想确定synatx是正确的,因为我不确定如何用管道输出2个文件。另外,我不能100%确定打印出带有截止日期的&9是否会以正常方式显示日期。我希望脚本仅显示实际登录的用户。Root expires never user1将于2015年3月20日到期。现在,您已经添加了示例输入和预期输出,但还没有告诉我们如何将一个映射到另一个。输入文件中的
smithj
在输出文件中如何变成
John Smith
?您确定史密斯的密码永不过期吗?您从哪个字段获得的是Frank West,他的密码将于2015年5月8日到期?我强烈怀疑你实际上有2个输入文件要处理,到目前为止你只给我们看了其中一个,所以我们遗漏了很多拼图。
user=someone
IFS=: read username name < <(getent passwd "$user" | cut -d: -f1,5)
expiry=$(chage -l "$user" | awk -F': ' '/^Account expires/ {print $2}')
printf "%s\n" "$username" "$name" "$expiry"