ich eine Datei mit folgendem Aufbau haben:Sed/awk: Ausrichten Wörter in einer Datei
# #################################################################
# TEXT: MORE TEXT
# TEXT: MORE TEXT
# #################################################################
___________________________________________________________________
ITEM 1
___________________________________________________________________
PROPERTY1: VALUE1_1
PROPERTY222: VALUE2_1
PROPERTY33: VALUE3_1
PROPERTY4444: VALUE4_1
PROPERTY55: VALUE5_1
Description1: Some text goes here
Description2: Some text goes here
___________________________________________________________________
ITEM 2
___________________________________________________________________
PROPERTY1: VALUE1_2
PROPERTY222: VALUE2_2
PROPERTY33: VALUE3_2
PROPERTY4444: VALUE4_2
PROPERTY55: VALUE5_2
Description1: Some text goes here
Description2: Some text goes here
Ich möchte ein anderes Element in die Datei hinzufügen, sed oder awk mit:
sed -i -r "\$a$PROPERTY1: VALUE1_3" file.txt
sed -i -r "\$a$PROPERTY2222: VALUE2_3" file.txt
So sieht usw. mein nächster Punkt wie folgt aus:
___________________________________________________________________
ITEM 3
___________________________________________________________________
PROPERTY1: VALUE1_3
PROPERTY222: VALUE2_3
PROPERTY33: VALUE3_3
PROPERTY4444: VALUE4_3
PROPERTY55: VALUE5_3
Description1: Some text goes here
Description2: Some text goes here
Die Säule Werte gezackt ist. Wie richte ich meine Werte wie bei früheren Elementen nach links aus? Ich kann hier 2 Lösungen sehen:
- Zum Ausrichten der Werte beim Einfügen in die Datei.
- Um die Werte in die Datei einzufügen, wie ich es getan habe und sie als nächstes auszurichten.
Der Befehl
sed -i -r "s|.*:.*|&|g" file.txt
Fänge die Eigenschaften und Werte, die ich ausrichten wollen, aber ich habe nicht in der Lage gewesen, sie richtig auszurichten, dh
awk '/^.*:.*$/{ printf "%-40s %-70s\n", $1, $2 }' file.txt
Es druckt die Datei , aber es enthält die Beschreibung Werte und Tags, schneidet die Werte, wenn sie Leerzeichen oder Bindestriche enthalten. Es ist nur ein großes Durcheinander.
Ich habe mehr Befehle basierend auf was ich auf Stack Overflow und einigen Blogs gefunden habe, aber nichts tut was ich brauche.
Hinweis: Die Werte der Beschreibungsvariablen sind nicht gezackt - dies liegt daran, dass ich sie in einer separaten Weise in die Datei schreibe.
Was ist falsch an meinen Befehlen? Wie erreiche ich, was ich brauche?
Während dies mit sed/awk lösbar ist, könnte es mit mächtigeren Tools einfacher zu lösen sein. Haben Sie überlegt, eine vollwertige Programmiersprache (z. B. Perl, Ruby, C++) mit geeigneten Datenstrukturen zu verwenden, um Ihr Problem zu lösen? – Heinrich
@Heinrich, ich würde es vermeiden, vollwertige Programmiersprachen zu verwenden, weil ich ein fast vollständiges Skript in bash habe, das genau das tut, was ich will und das ist das einzige Problem damit. Ich möchte die Benutzer meines Skripts nicht zwingen, Compiler oder Interpreter für verschiedene Sprachen zu installieren, aufgrund dieses (nicht so ernsthaften) Problems. – user2738748