2016-10-14 5 views
2

In Unix, ich versuche, eine Sequenz von Ausschneiden und Einfügen-Befehle zu schreiben (Speichern Ergebnis jedes Befehls in einer Datei), die jeden Namen in der Datei (unten) shortlist invertiert und ein Koma nach dem Nachnamen (z. B. Bill Johnson wird Johnson, Rechnung).Wie Verwenden von Ausschneiden und Einfügen von Befehlen als ein einzelner Zeilenbefehl?

hier ist meine Datei Auswahl:

2233:charles harris :g.m.  :sales  :12/12/52: 90000 
9876:bill johnson :director :production:03/12/50:130000 
5678:robert dylan :d.g.m. :marketing :04/19/43: 85000 
2365:john woodcock :director :personnel :05/11/47:120000 
5423:barry wood  :chairman :admin  :08/30/56:160000 

ich in der Lage bin von Auswahl zu schneiden, aber nicht sicher, wie es in einer Befehlszeile in meine FileNew Datei einfügen auf. Hier ist mein Code für Schnitt:

cut -d: -f2 shortlist 

Ergebnis:

charles harris 
bill johnson 
robert dylan 
john woodcock 
barry wood 

Jetzt möchte ich dies in meinem FileNew Datei eingefügt werden, und wenn ich Katze FileNew, Ergebnis sollte wie folgt aussehen,

harris, charles 
johnson, bill 
dylan, robert 
woodcock, john 
wood, barry 

Bitte führen Sie mich durch diese. Vielen Dank.

+3

Enthält die shortlist-Datei jemals Einträge wie 'jane x. smith' oder 'dr elizabeth jones' oder irgendein anderes Format des Namens jenseits von zwei durch ein Leerzeichen getrennten Wörtern? –

Antwort

2

Sie es mit einem einzigen awk tun könnte:

awk -F: '{split($2,a,//); if(a[2]) l=a[2] ", "; print l a[1]}' shortlist 

Ich nehme an, dass wenn Sie keinen zweiten Namen haben, Sie das Komma nicht drucken möchten (und Sie haben nicht mehr als 2 Wörter im Namen).

+0

Ich finde Ihre Anforderung, nur ausschneiden/einfügen ungewöhnlich zu verwenden. Aber mit GNU-Schnitt, der '--output-delimiter' liefert, können Sie mit 2 Schnitten machen. Aber das wird das nachfolgende Komma/Leerzeichen haben. 'cut -d: -f2 --output-delimiter =", "shortlist | cut -d '' --output-delimiter = "," -f2,1' –

+0

Beachten Sie, dass GNU 'cut' (in Übereinstimmung mit POSIX [' cut'] (http://pubs.opengroup.org/onlinepubs/9699919799 /utilities/cut.html) Anforderungen) Felder weder wiederholt noch neu anordnet. Sie können ein bestimmtes Feld mehrmals anfordern und es wird einmal angezeigt. Sie können Felder mit '-f 2,1 'neu anordnen, aber die Felder werden in der Reihenfolge' field1 field2' ausgegeben. Das überraschte mich, als ich eine eigene Antwort überprüfte. (Ich habe eine alte Implementierung von 'cut', die sich nicht so verhält; gegeben '-f 2,1,2,1' würde es 'harris charles harris charles' ausgeben). –

1

Sobald Sie cut aufzuspalten die Zeichenfolge verwendet haben, kann es einfacher sein zu verwenden awk als paste das Ergebnis Sie produzieren möchten:

$ cut -d":" -f2 shortlist | awk '{printf "%s, %s\n", $2, $1}' 
+0

Meine Befehle müssen nur ausschneiden und einfügen verwenden. Ich kann nicht awk mit Schnitt verwenden. Ich war in der Lage, das Ergebnis mit awk zu bekommen, aber ich brauche es mit Paste – Venkata

Verwandte Themen