AWK - 从列表中选择随机记录

时间:2018-01-23 04:23:45

标签: bash random awk sed

我想在我的* NIX机器上从/usr/share/dict/words返回一个随机单词。我已经使用BASH,AWK和SED编写了以下脚本来完成它,但我觉得它应该可以使用AWK单独使用RNNF字段来编写。

#!/bin/bash

get_secret_word () {
    awk '/^[A-Za-z]+$/ {if (length($1) > 3 && length($1) < 9) 
        print $1}' /usr/share/dict/words > /tmp/word_list
    word_list_length=$(wc -l /tmp/word_list | awk '{print $1}')
    random_number=$(( $RANDOM%$word_list_length ))
    secret_word=$(sed "${random_number}!d" /tmp/word_list)
    return $secret_word
}
get_secret_word
echo $secret_word

有什么建议吗?我喜欢AWK,我想更好地理解它。

1 个答案:

答案 0 :(得分:1)

尝试类似:

awk '
BEGIN {
    srand('"$RANDOM"')
}
{
    if (/^[A-Za-z]+$/ && length() > 3 && length() < 9)
        words[i++] = $1
}
END {
    print words[int(rand() * i)]
}' /usr/share/dict/words

将单词存储在内存中还是存储在文件中取决于您的使用情况。
无论如何。