问题
I am trying to use mkpasswd inside awk to compare a file field with encryption (I use Ubuntu):
Execute:
mkpasswd -m sha-512 word abcdefgh
Output:
$6$abcdefgh$SByAdlFKQWuVuMNFUL.ERj1CxsscDs.v6nR2h2cyIkM.PAEUEqaMudTk3I/yfyFeaJY/da4dJto/1wXxMCaok/
Trying:
awk 'mkpasswd -m sha-512 $7 abcdefgh =="$6$abcdefgh$SByAdlFKQWuVuMNFUL.ERj1CxsscDs.v6nR2h2cyIkM.PAEUEqaMudTk3I/yfyFeaJY/da4dJto/1wXxMCaok/"' FS=: file > file1
File:
6:g:g:g:g:g:word1
7:g:g:g:g:g:word
8:g:g:g:g:g:word2
Expected output:
7:g:g:g:g:g:word
回答1:
awk -F':' '
{
cmd = "mkpasswd -m sha-512 \047" $7 "\047 abcdefgh"
sha = ( (cmd | getline line) > 0 ) ? line : "N/A" )
close(cmd)
}
sha == "$6$abcdefgh$SByAdlFKQWuVuMNFUL.ERj1CxsscDs.v6nR2h2cyIkM.PAEUEqaMudTk3I/yfyFeaJY/da4dJto/1wXxMCaok/"
' file > file1
See http://awk.freeshell.org/AllAboutGetline for if/how to use getline, including reading from a pipe as in this case.
来源:https://stackoverflow.com/questions/61436882/execute-mkpasswd-inside-awk