update scripts to automatic add headline
This commit is contained in:
parent
e3812613b1
commit
73aac4e6e6
2 changed files with 58 additions and 49 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Reference in a new issue