2016-03-27 3 views
1

Dies ist, was die ursprüngliche Datei sieht aus wieDateiausgabe mit Leerzeichen Unix-Formatierung

cat new 

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

ich ein Problem für Namen der Formatierung dieser Datei habe, die keinen zweiten Vornamen haben.

$ cat new | awk '{printf "%10s %7s %3s %6s %7s %6s %6s %4s %6s\n" $1, $2, $3, $4, $5, $6, $7, $8, $9}' 

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

Nun das ist, was das Format herauskommt als das, was ich mag es würde jede Spalte sein auf 1 Raum so einen Teil entfernt sein wie der Name ist Jackson, Bob D. ist eine Spalte C0001 ist eine Spalte jetzt Der Name hat Leerzeichen zwischen jedem Buchstaben. Das Problem ist, Menschen ohne Mittel Namen durcheinander alles nach oben, wie kann ich diese Datei-Format wie dieses

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack  C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

Also alles Linien und sieht bis zu sauber aussehen Fragen lassen Sie mich Dank im Voraus für Sie Hilfe!

+0

Bitte zeigen Sie die Beispiel-Eingabedatei, die Sie verwendet haben, um dies zu erzeugen. – Will

+0

Sie vergeben nur drei Zeichen an den Namen, warum Sie erwarten, dass es eine größere Breite als das hat? – pfnuesel

+0

Nein, er weist dem Namen @pfnuesel 10 zu; 3 ist die Nummer. – Will

Antwort

1

awk zur Rettung!

$ awk -v OFS='~' '{$2=$2" "$3;$3=""} 
      NF==10{$2=$2" "$4;$4=""} 
      NF==9{$3=$3 OFS ""}1' file | column -ts~ 

1 Jackson, Bob D. C0001 book pizza apple 4.00 123as 
2 Filer, Jack  C0002 happy apple hat 4.00 124ab 
3 Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

können Sie die Felder in awk als alternative Lösung verschieben, aber das auch funktioniert.

Setzen Sie das Ausgabefeldtrennzeichen (OFS) auf ein nicht verwendetes Zeichen (hier Tilde) und lassen Sie column die Formatierung durch dieses Trennzeichen behandeln.

+0

Ok, ich hatte einen Fehler in der ursprünglichen Datei Inhalt Ich habe mir einen angesehen Ich habe versucht zu formatieren macht die Art, wie ich es jetzt gesetzt habe, beeinflussen dies? Ursache sein immer noch versucht, c0002 als zweiter Name und nicht sicher, warum – NewEffect

+0

Shift alle Felder um eins zu ziehen. $ 2 -> $ 1 etc. müssen ebenfalls um eins dekrementiert werden. – karakfa

+0

Entschuldigung nicht gut mit diesem Befehl OFS was dekrementieren wir? etwas neues zu awk noch Entschuldigung für die Verwirrung – NewEffect