update scripts to automatic add headline

This commit is contained in:
Simon Rieger 2025-02-17 16:23:13 +01:00
parent e3812613b1
commit 73aac4e6e6
2 changed files with 58 additions and 49 deletions

View file

@ -1,37 +1,39 @@
#!/bin/bash
INPUT_FILE="input.txt"
OUTPUT_FILE="output.md"
# Konfiguration
INPUT_FILE=$1
OUTPUT_FILE=$2
SPACES_PER_LEVEL=4
LIST_INDENTATION=2
HEADER_LEVELS=3
# Schritt 1: Tabs durch 4 Leerzeichen ersetzen (ohne expand)
# Tabs zu Leerzeichen konvertieren
sed 's/\t/ /g' "$INPUT_FILE" > temp_processed.txt
# Schritt 2: Hierarchische Listen generieren
while IFS= read -r line; do
# Zähle führende Leerzeichen
spaces=$(echo "$line" | grep -o '^ *' | wc -c)
spaces=$((spaces - 1)) # wc -c zählt Nullbyte
# Berechne Ebene
level=$((spaces / 4))
# Generiere Einrückung
indent=""
for ((i=0; i<level; i++)); do
indent+=" "
done
# Konstruiere neue Zeile
if (( level > 0 )); then
# Entferne originale Einrückung und füge MD-Formatierung hinzu
clean_line="${line:$spaces}"
new_line="${indent}- ${clean_line}"
else
new_line="$line"
fi
echo "$new_line"
done < temp_processed.txt > "$OUTPUT_FILE"
# Ausgabedatei leeren
> "$OUTPUT_FILE"
# Aufräumen
# Verarbeitung jeder Zeile
while IFS= read -r line; do
# Führende Leerzeichen ermitteln
leading_spaces=${line%%[! ]*}
total_spaces=${#leading_spaces}
# Ebene berechnen
level=$((total_spaces / SPACES_PER_LEVEL))
content="${line:total_spaces}"
if (( level <= HEADER_LEVELS )); then
# Überschriften formatieren
hashtags=$(printf "%0.s#" $(seq 0 $level))
echo "${hashtags} ${content}" >> "$OUTPUT_FILE"
else
# Listen formatieren
list_level=$((level - HEADER_LEVELS - 1))
indent=$(printf "%*s" $((LIST_INDENTATION * list_level)) "")
echo "${indent}- ${content}" >> "$OUTPUT_FILE"
fi
done < temp_processed.txt
# Temporäre Datei aufräumen
rm temp_processed.txt

View file

@ -1,32 +1,39 @@
#!/bin/bash
INPUT_FILE="input.txt"
OUTPUT_FILE="output.md"
# Variablen definieren
INPUT_FILE=$1
OUTPUT_FILE=$2
SPACES_PER_LEVEL=4
LIST_INDENTATION=2
HEADER_LEVELS=3
# Tabs zu 4 Leerzeichen konvertieren OHNE andere Leerzeichen zu verändern
sed 's/\t/ /g' "$INPUT_FILE" > temp_processed.txt
# AWK-Verarbeitung mit exakter Ebenenerkennung
awk '
awk -v spaces_per_level=$SPACES_PER_LEVEL -v list_indentation=$LIST_INDENTATION -v header_levels=$HEADER_LEVELS '
{
# Gesamtzahl der führenden Leerzeichen ermitteln
match($0, /^ */)
total_spaces = RLENGTH
# Ebene berechnen (1 Ebene = 4 Leerzeichen)
level = int(total_spaces / 4)
# Neue Einrückung generieren
indent = ""
for (i = 0; i < level; i++) {
indent = indent " "
level = int(total_spaces / spaces_per_level)
# Überschriften (bis zur angegebenen Ebene)
if (level <= header_levels) {
hashtags = ""
for (i = 0; i <= level; i++) {
hashtags = hashtags "#"
}
$0 = hashtags " " substr($0, total_spaces + 1)
}
# Listen (ab der nächsten Ebene)
else {
list_level = level - header_levels - 1
# Anpassung der Einrückung basierend auf LIST_INDENTATION
adjusted_indent = ""
for (i = 0; i < list_indentation * list_level; i++) {
adjusted_indent = adjusted_indent " "
}
$0 = adjusted_indent "- " substr($0, total_spaces + 1)
}
# Zeile neu aufbauen
if (level > 0) {
# Original-Leerzeichen entfernen und durch MD-konforme ersetzen
$0 = indent "- " substr($0, total_spaces + 1)
}
print
}' temp_processed.txt > "$OUTPUT_FILE"