Platz- / Breitendruck von Variablen in der Shell behoben

955
Bimal Poudel

Ich habe einen tabellarischen Bericht über einige Datenvariablen erstellt, die über printf in der Shell gedruckt wurden.

Project One | 76 | 80M | 80M | 80M  Project Two | 46M | 52M | 52M | 52M  Project Three | 174 | 171M | - | 173M  

Die Ausgabe ist hier manuell beabstandet. Gibt es eine Möglichkeit, Variablen mit fester Breite zu drucken?

Zum Beispiel in der ersten Zeile 76 [Leerzeichen], 80M, ... insgesamt drei Zeichenbreite beim Drucken mit einer Shell-Variablen.

0

1 Antwort auf die Frage

0
theoden

Wenn ich verstanden habe, was Sie wollen, ist eine Funktion, die nach einer angegebenen Zeichenfolge eine bestimmte Anzahl von Leerzeichen hinterlässt. Hier ist es:

fix_space() { string="$1" len="$2" perl -e "my \$str = '`printf "$string" | sed "s/'/\\'/g"`'; print \$str.' ' x ($len - length(\$str))" } echo "'`fix_space "ololfdsaf" 20`'" echo "'`fix_space "ololff" 20`'" 

Es macht einfach die perlganze schmutzige Arbeit. String steht als erstes Argument und die volle Länge als zweites. Ich bin mir sicher, dass dies Ihnen helfen wird, Ihre Ausgabe auszurichten.

BEARBEITEN:

Sie können dies auch ohne perlShell tun . Dann müssen Sie Folgendes eingeben:

printf "'$string`printf ' '%.0s ))}`'\n" 

Referenz

http://rosettacode.org/wiki/Repeat_a_string#UNIX_Shell

Nennen wir diese Perle nicht als schmutzigen Job. weil es jetzt so funktioniert, wie ich es wollte. Ich werde es benutzen. Vielen Dank. Bimal Poudel vor 9 Jahren 0
@BimalPoudel, ich habe die Antwort erweitert, falls Sie Zeitverbrauch haben. Die Verwendung von printf ist schneller. theoden vor 9 Jahren 0