I want to use printf under bash to format german verbs as follows:
INFINITIV PRATERITUM PERFEKT 3.PERS. SING
heißen hieß hat geheißen er heißt
kaufen kaufte hat gekauft er kauft
I use a simple printf commando in my bash script:
printf "%-15s %-15s %-15s %-15s %-15s\n" "INFINITIV" "PRATERITUM" "PERFEKT" "3.PERS. SING"
printf "%-15s %-15s %-15s %-15s %-15s\n" "heißen" "hieß" "hat geheißen" "er heißt"
printf "%-15s %-15s %-15s %-15s %-15s\n" "kaufen" "kaufte" "hat gekauft" "er kauft"
But is seems that the Eszett is seen as two characters. Therefore on the screen after every ß the text shifts one position to the left. The output is:
pwp@linuxcomputers:~/Scripts/Test$ Deutsche-Verben-Scharf-S
INFINITIV PRATERITUM PERFEKT 3.PERS. SING
heißen hieß hat geheißen er heißt
kaufen kaufte hat gekauft er kauft
How can I prevent this shift and make the printf formatting do what it is intended to do?
With a function to pad your strings at the end:
pad() {
local string="$1 "
echo "${string:0:15}"
}
printf "%s %s %s %s\n" "$(pad "INFINITIV")" "$(pad "PRATERITUM")" "$(pad "PERFEKT")" "$(pad "3.PERS. SING")"
printf "%s %s %s %s\n" "$(pad "heißen")" "$(pad "hieß")" "$(pad "hat geheißen")" "$(pad "er heißt")"
printf "%s %s %s %s\n" "$(pad "kaufen")" "$(pad "kaufte")" "$(pad "hat gekauft")" "$(pad "er kauft")"
Output:
INFINITIV PRATERITUM PERFEKT 3.PERS. SING heißen hieß hat geheißen er heißt kaufen kaufte hat gekauft er kauft