43 lines
		
	
	
		
			949 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			949 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
categories=( adj adv noun verb )
 | 
						|
declare -A categoriesByWord=()
 | 
						|
 | 
						|
echo "Parsing category lists.."
 | 
						|
for (( c = 0; c < ${#categories[@]}; ++c )); do
 | 
						|
    printf '\rCategory: %s..   ' "${categories[c]}"
 | 
						|
 | 
						|
    while read -r word _; do
 | 
						|
        categoriesByWord["$word"]+="$c "
 | 
						|
    done < ~/.dictionary.d/"index.${categories[c]}"
 | 
						|
done
 | 
						|
echo
 | 
						|
 | 
						|
echo "Processing words list.."
 | 
						|
{
 | 
						|
    fdByCategory=()
 | 
						|
    for (( c = 0; c < ${#categories[@]}; ++c )); do
 | 
						|
        exec {fdByCategory[c]}>"words.txt.${categories[c]}"
 | 
						|
    done
 | 
						|
 | 
						|
    w=0
 | 
						|
    while IFS= read -r word _; do
 | 
						|
        let ++w
 | 
						|
 | 
						|
        if (( ${#word} < 3 )) || [[ $word != *[aeiou]* ]]; then
 | 
						|
            continue
 | 
						|
        fi
 | 
						|
 | 
						|
        wordCategories=${categoriesByWord["$word"]}
 | 
						|
 | 
						|
        for c in $wordCategories; do
 | 
						|
            printf '%d %s\n' "$w" "$word" >&"${fdByCategory[c]}"
 | 
						|
        done
 | 
						|
    done < words.txt
 | 
						|
 | 
						|
    for fd in "${fdByCategory[@]}"; do
 | 
						|
        exec {fd}>&-
 | 
						|
    done
 | 
						|
}
 | 
						|
echo
 |