2010-11-24 18 views
0

Ich habe diese Datei, data.txt, der Inhalt ist:Daten im Matrixformat anzeigen?

100X00 
20X0X0 
3000XX 
4X00XX 

Ich möchte wie in Matrix-Format anzuzeigen

A B C D E 
1    X   
2  X   X  
3     X X 
4 X    X X 

Ich bin frei, jeden Befehl zu verwenden, wie sed/awk oder Grep. Meine aktuelle Methode ist:

a=0 
echo -e "\tA\tB\tC\tD\tE" 
while read line 
    do a=$(($a+1)); 
    sed '{s/0/ /g}' data.txt 
done < data.txt 

Natürlich funktioniert es nicht. Jeder kann mir dabei helfen?

+0

Ok, ich werde entweder fragen oder platzen. Dies wäre nicht zufällig mit einer Hausaufgabe verbunden, die etwas mit Flugzeugsitzen und Buchung zu tun hat? In den letzten Tagen habe ich mindestens zwei weitere Fragen bezüglich bash und der Verarbeitung von Dateien in diesem Format gesehen ... – thkala

+0

hmmm, du hast recht: http://stackoverflow.com/questions/4262708/bash-automatic-update- data-file-and-display –

+0

@ ltn100: auch dieser scheint unheimlich ähnlich: http://stackoverflow.com/questions/4255294/how-to-update-matrix-like-data-txt-file-in-bash- Programmieren – thkala

Antwort

0
echo -e "\tA\tB\tC\tD\tE" 
sed 's|.|&\t|g; s|\t0|\t|g; s|\t*$||' <data.txt 

Dies scheint mit dem eingegebenen Beispiel gut zu funktionieren.

EDIT:

Erläuterung:

eine horizontale Lasche Hinzufügen (\ t) nach jedem Zeichen, dann diese Nullen entfernen, die durch eine Lasche vorangestellt werden (und somit nicht in der ersten Spalte ist), dann Entfernen Sie alle Tabs vom Ende der Zeile.

EDIT2:

Bitte beachten Sie, dass es eine leichte Veränderung im Vergleich zu meiner ersten Antwort. Ich werde seine Wirkung dem Leser als Übung überlassen.

+0

Sie sind Genie. Wenn du den sed-Code erklären könntest, wäre es viel besser für neue Bash-Script-Anfänger wie mich. Könnten Sie bitte? – commando

+0

Danke für die Erklärung. Nachdem ich damit gespielt habe, verstehe ich den Code jetzt. Aber ich bin etwas traurig, wenn du sagst, ich schreibe Hausaufgaben in meinem anderen Post = ( – commando

+0

Die Umleitung ist unnötig, sed akzeptiert einen Dateinamen als Argument. –