56 lines
1.3 KiB
Bash
56 lines
1.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Written with the help of chatgpt o3-mini
|
|
function klabels {
|
|
local header=
|
|
local padding=
|
|
local trim_length=
|
|
local line_text=
|
|
local first_line=
|
|
local max_key_length=0
|
|
local max_label_length=0
|
|
local key=
|
|
local value=
|
|
|
|
while IFS= read -r line; do
|
|
if [ -z "$header" ]; then
|
|
header="$line"
|
|
padding="${header//LABELS/}"
|
|
padding="${padding//?/ }"
|
|
echo "$header"
|
|
trim_length=${#padding}
|
|
continue
|
|
fi
|
|
|
|
line_text="${line:0:trim_length}"
|
|
first_line=
|
|
IFS=',' read -ra labels <<< "${line:trim_length}"
|
|
|
|
# Calculate the maximum key length to align key=value pairs
|
|
for label in "${labels[@]}"; do
|
|
key="${label%%=*}"
|
|
max_key_length=$(( ${#key} > max_key_length ? ${#key} : max_key_length ))
|
|
done
|
|
|
|
# Print a line separator based on the longest key length
|
|
separator_length=$((max_key_length + trim_length))
|
|
printf "%${separator_length}s\n" | tr ' ' "="
|
|
|
|
# Loop through labels and align them
|
|
for label in "${labels[@]}"; do
|
|
key="${label%%=*}"
|
|
value="${label#*=}"
|
|
|
|
# Format the label to align the '=' sign
|
|
printf -v formatted_label "%-${max_key_length}s = %s" "$key" "$value"
|
|
|
|
if [ -z "$first_line" ]; then
|
|
first_line=1
|
|
echo "$line_text$formatted_label"
|
|
else
|
|
echo "$padding$formatted_label"
|
|
fi
|
|
done
|
|
done
|
|
}
|