Delete count_words.sh.save
This commit is contained in:
@ -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
|
||||
Reference in New Issue
Block a user