User Tools

Site Tools


howtos:diceware_-_pick_random_words_from_file

Colorized Output

#!/bin/bash

filename=$1
number_of_words=$2

# Check if a file name and number of words are passed as parameters
if [ $# -lt 2 ]; then
  echo "Usage: $0 filename number_of_words [number_of_lines]"
  exit 1
fi

# Check if file exists
if [ ! -f $filename ]; then
  echo "Error: File $filename does not exist."
  exit 1
fi

# Get the total number of words in the file
total_words=$(wc -w $filename | awk '{print $1}')

# Check if the number of words passed as a parameter is not greater than the total number of words in the file
if [ $number_of_words -gt $total_words ]; then
  echo "Error: The number of words should be less than or equal to the total number of words in the file ($total_words)."
  exit 1
fi

# Define colors array
colors=("\033[31m" "\033[32m" "\033[33m" "\033[34m" "\033[35m" "\033[36m")

# Get the words from the file as an array
all_words=($(cat $filename))

# If the number of lines is not passed as a parameter, output one line
if [ $# -eq 2 ]; then
  # Select the required number of random words
  for i in $(eval echo {1..$number_of_words}); do
    random_index=$((RANDOM % total_words))
    selected_word=${all_words[$random_index]}
    capitalized_word="$(tr '[:lower:]' '[:upper:]' <<< ${selected_word:0:1})${selected_word:1}"
    echo -ne "\033[47m\033[30m\033[1m${colors[$((i - 1)) % ${#colors[@]}]}$capitalized_word \033[0m"
  done
  echo ""
else
  number_of_lines=$3

  # Print a line before the output
  echo "---"

  # Get the required number of random words and combine them into multiple lines, with the number of lines specified
  for i in $(eval echo {1..$number_of_lines}); do
    # Select the required number of random words
    for j in $(eval echo {1..$number_of_words}); do
      random_index=$((RANDOM % total_words))
      selected_word=${all_words[$random_index]}
      capitalized_word="$(tr '[:lower:]' '[:upper:]' <<< ${selected_word:0:1})${selected_word:1}"
      echo -ne "\033[47m\033[30m\033[1m${colors[$((j - 1)) % ${#colors[@]}]}$capitalized_word \033[0m"
    done
    echo ""
    
  done

  # Print a line after the output
  echo "---"
fi

No Color

#!/bin/bash

# Check if a file name and number of words are passed as parameters
if [ $# -ne 2 ]; then
  echo "Usage: $0 filename number_of_words"
  exit 1
fi

filename=$1
number_of_words=$2

# Check if file exists
if [ ! -f $filename ]; then
  echo "Error: File $filename does not exist."
  exit 1
fi

# Get the total number of words in the file
total_words=$(wc -w $filename | awk '{print $1}')

# Check if the number of words passed as a parameter is not greater than the total number of words in the file
if [ $number_of_words -gt $total_words ]; then
  echo "Error: The number of words should be less than or equal to the total number of words in the file ($total_words)."
  exit 1
fi

# Get the required number of random words and combine them into a single word, excluding the last underscore
echo $(shuf -n $number_of_words $filename | tr '\n' '_' | sed 's/_$//')

Word file:wordlist.zip

howtos/diceware_-_pick_random_words_from_file.txt · Last modified: 03/02/2023 20:27 by domingo