Delete count_words.sh.save

This commit is contained in:
2025-10-21 11:10:42 +02:00
parent 3e507f57cc
commit 324459bb36

View File

@ -1,182 +0,0 @@
#!/usr/bin/env bash
set -uo pipefail
# count_words.sh — Räknar underscore-separerade ord i filnamn
# Version: 1.3.0
VERSION="1.3.1"
# Usage:
# ./count_words.sh [katalog] [--to-file] [--ext "mp4,avi,mkv"] [--version]
#
# Exempel:
# ./count_words.sh .
# ./count_words.sh /path --to-file
# ./count_words.sh /path --ext "mp4,avi" --to-file
# ./count_words.sh --version
DIR="."
TO_FILE=false
OUTFILE="reserved__words.txt"
EXTS=("mp4") # default
print_help() {
cat <<EOF
count_words.sh v$VERSION
Räknar ord (underscore-separerade) i filnamn, case-insensitive.
Ignorerar filändelser; filtrerar på angivna ändelser (default: mp4).
Ignorerar prefix som [WUNF] eller [WUNF_001] i filnamn.
Usage:
$0 [dir] [--to-file] [--ext "mp4,avi,mkv"] [--version]
Flaggor:
--to-file Skriv endast orden (kommaseparerat) till $OUTFILE (append utan dubbletter)
--ext "a,b,c" Tillåtna filändelser (kommaseparerad lista), t.ex. "mp4,avi"
--version Skriv ut version och avsluta
-h, --help Visa denna hjälp
EOF
}
# Om första argumentet är en katalog, använd den
if [[ $# -gt 0 && -d "${1:-}" ]]; then
DIR="$1"
shift
fi
# Arg-parsning
while [[ $# -gt 0 ]]; do
case "$1" in
--to-file)
TO_FILE=true; shift ;;
--ext)
shift
IFS=',' read -r -a EXTS <<< "${1:-}"
shift || true
;;
--version)
echo "$VERSION"
exit 0
;;
-h|--help)
print_help; exit 0 ;;
*)
echo "Okänt argument: $1" >&2
print_help
exit 1
;;
esac
done
# Bygg lookup för tillåtna ändelser (lowercase)
declare -A ALLOWED_EXT=()
for e in "${EXTS[@]}"; do
[[ -n "$e" ]] || continue
ALLOWED_EXT["${e,,}"]=1
done
declare -A counts=()
shopt -s nullglob
for f in "$DIR"/*; do
[[ -f "$f" ]] || continue
name=$(basename "$f")
# Filtrera på tillåtna ändelser
ext="${name##*.}"
if [[ "$name" == "$ext" ]]; then
continue # ingen ändelse
fi
ext_lc="${ext,,}"
[[ ${ALLOWED_EXT[$ext_lc]+_} ]] || continue
# Ta bort ändelsen
base="${name%.*}"
# TA BORT WUNF-PREFIX: [WUNF] eller [WUNF_ddd] var som helst i namnet
# (behåll allt annat)
base_noprefix=$(sed -E 's/\[WUNF(_[0-9]{3})?\]//g' <<< "$base")
# Splitta på '_' och räkna (case-insensitive)
oldIFS=$IFS
IFS='_'
read -r -a parts <<< "$base_noprefix"
IFS=$oldIFS
for word in "${parts[@]}"; do
# Trimma whitespace
w="$word"
w="${w#"${w%%[![:space:]]*}"}" # trim left
w="${w%"${w##*[![:space:]]}"}" # trim right
[[ -n "$w" ]] || continue
# Normalisera till lowercase
w_lc="${w,,}"
# Initiera och öka
: "${counts[$w_lc]:=0}"
(( counts[$w_lc]++ ))
done
done
# Samla ord med förekomst > 2
results=()
for w in "${!counts[@]}"; do
if (( counts[$w] > 2 )); then
results+=("${counts[$w]} $w")
fi
done
# Ingen träff?
if [[ ${#results[@]} -eq 0 ]]; then
if $TO_FILE; then
if [[ -f "$OUTFILE" ]]; then
echo "Inga nya ord (>2) hittades. Filen lämnades oförändrad. (v$VERSION)"
else
: > "$OUTFILE"
echo "Inga ord (>2) hittades. Tom fil skapad: $OUTFILE (v$VERSION)"
fi
else
echo "Inga ord förekom mer än två gånger. (v$VERSION)"
fi
exit 0
fi
# Sortera: primärt på antal (fallande), sekundärt på ord (stigande)
sorted_lines=$(printf "%s\n" "${results[@]}" | sort -nrk1,1 -k2,2)
if $TO_FILE; then
# Nya ord (lowercase redan), en per rad
new_words=$(printf "%s\n" "$sorted_lines" | awk '{print $2}')
# Läs befintliga ord från OUTFILE (om den finns) och bygg union utan dubbletter
declare -A uniq=()
if [[ -f "$OUTFILE" ]]; then
# Tolka både kommatecken och whitespace som separerare
while IFS= read -r tok; do
w="$tok"
# trim
w="${w#"${w%%[![:space:]]*}"}"
w="${w%"${w##*[![:space:]]}"}"
[[ -n "$w" ]] || continue
uniq["${w,,}"]=1
done < <(tr -s ',[:space:]' '\n' < "$OUTFILE")
fi
# Lägg till nya ord
while IFS= read -r nw; do
[[ -n "$nw" ]] || continue
uniq["$nw"]=1
done <<< "$new_words"
# Bygg kommaseparerad sträng (alfabetiskt för determinism)
all_words=$(printf "%s\n" "${!uniq[@]}" | sort -u | paste -sd, -)
# Skriv tillbaka hela unionen (utan dubbletter)
echo "$all_words" > "$OUTFILE"
echo "Resultat uppdaterat i $OUTFILE (v$VERSION)"
else
echo "Ord som förekommit mer än två gånger (sorterat högst->lägst) — v$VERSION:"
while read -r count word; do
echo "$word ($count ggr)"
done <<< "$sorted_lines"
fi