我有一个最常见密码及其频率的列表。这是一个很长的列表,其格式如下:
59462 password
49992 iloveyou
33919 princess
...
30 yahoo123
需要明确的是,最常见的密码(根据此列表)是“password”,有 59,462 人拥有此密码。第二个最常见的密码是“iloveyou”,出现频率为 49,992。
问题是采用两个整数输入,第一个应该小于第二个(脚本应该检查)。该脚本应以至少第一个数字和最多第二个数字的频率打印所有密码。
我在这个问题上被困了大约 4 个小时左右,我完全迷失了。
这是我到目前为止所得到的:
var1=$1
var2=$2
if
[ $one -lt $two ]
then
cat /home/misc/gwrika/cse251/hw3/short-rockyou.txt | awk '^$var1' |
else
echo "please enter the first argument as the smaller number and the second argument as the larger number"
fi
老实说,我什至不知道如何开始。
答案1
我可能会这样处理:
low=$1
high=$2
if [ "$low" -lt "$high" ]
then
awk -v low="$low"-v high="$high" '$1 >= low && $1 <= high { print substr($0, index($0, " ")+1) }' /home/misc/gwrika/cse251/hw3/short-rockyou.txt
else
echo "please enter the first argument as the smaller number and the second argument as the larger number"
fi
我重命名了你的变量,但它的关键是一个简单的 awk 脚本,你在其中传递下限和上限,然后询问第 1 列是否在该范围内;如果是,则打印第二个字段(通过找到第一个空格的位置并跳过它)。如果如您的示例输入所示,30 yahoo123
您有多个空格将频率与密码分隔开,但密码均从某一列开始,请使用:
awk ... print substr($0, 7) ...
在适当的列开始打印。