2010-11-24 12 views
0

Je possède ce fichier, data.txt, le contenu est:Afficher les données au format matriciel?

100X00 
20X0X0 
3000XX 
4X00XX 

Je veux afficher sous forme de matrice comme

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

Je suis libre d'utiliser toute commande, comme sed/awk ou grep. Ma méthode actuelle est:

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 

Bien sûr que cela ne fonctionne pas. Quelqu'un peut m'aider à ce sujet?

+0

Ok, je vais demander ou éclater. Cela ne serait en aucun cas lié à un devoir qui a quelque chose à voir avec les sièges d'avion et la réservation? Au cours des derniers jours, j'ai vu au moins deux autres questions concernant bash et le traitement des fichiers dans ce format ... – thkala

+0

hmmm, vous avez raison: http://stackoverflow.com/questions/4262708/bash-automatic-update- data-file-and-display –

+0

@ ltn100: aussi celui-ci semble étrangement similaire: http://stackoverflow.com/questions/4255294/how-to-update-matrix-like-data-txt-file-in-bash- programmation – thkala

Répondre

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

Cela semble fonctionner correctement avec l'échantillon d'entrée fourni.

EDIT:

Explication:

Ajouter un onglet horizontal (\ t) après chaque caractère, puis retirez les zéros qui sont préfixé par un onglet (et ne sont donc pas dans la première colonne), puis supprimer les onglets de la fin de la ligne.

EDIT2:

S'il vous plaît noter qu'il ya un léger changement par rapport à ma première réponse. Je vais laisser ses effets comme un exercice au lecteur.

+0

Vous êtes un génie. Si vous pouviez expliquer le code sed, ce serait beaucoup mieux pour un nouvel apprenant script bash comme moi. Pourrais tu s'il te plait? – commando

+0

Merci pour l'explication. Après avoir joué avec, je pense que je comprends le code maintenant. Mais je suis abit triste, quand vous dites que je poste un devoir dans mon autre poste = ( – commando

+0

La redirection est inutile 'sed' accepte un nom de fichier comme argument. –