#!/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= local filter_value="$1" local filter_key="$2" 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 # Loop through labels and align them for label in "${labels[@]}"; do key="${label%%=*}" value="${label#*=}" if [ -n "$filter_key" ] && ! [[ "$key" == *$filter_key* ]] ; then continue fi if [ -n "$filter_value" ] && ! [[ "$value" == *$filter_value* ]] ; then continue fi # 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 # Print a line separator based on the longest key length separator_length=$((max_key_length + trim_length)) printf "%${separator_length}s\n" | tr ' ' "-" echo "$line_text$formatted_label" else echo "$padding$formatted_label" fi done done }