Mercurial > docs > cut
comparison cut.txt @ 19:a62964d0cc54
Verbesserungen durch diction(1) eingearbeitet
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Tue, 19 May 2015 08:04:05 +0200 |
parents | b1e7b45fb3c8 |
children | c0e589b92c52 |
comparison
equal
deleted
inserted
replaced
18:b1e7b45fb3c8 | 19:a62964d0cc54 |
---|---|
17 erweitert wurden. Cut schneidet entweder gewuenschte Zeichen aus | 17 erweitert wurden. Cut schneidet entweder gewuenschte Zeichen aus |
18 den Zeilen der Eingabe oder gewuenschte, durch Trennzeichen | 18 den Zeilen der Eingabe oder gewuenschte, durch Trennzeichen |
19 definierte, Felder. | 19 definierte, Felder. |
20 | 20 |
21 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu | 21 Der Zeichenmodus ist optimal geeignet um Festbreitenformate zu |
22 zerteilen. So kann man damit beispielsweise bestimmte | 22 zerteilen. Man kann damit beispielsweise bestimmte |
23 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in | 23 Zugriffsrechte aus der Ausgabe von `ls -l' ausschneiden, in |
24 diesem Beispiel die Rechte des Besitzers: | 24 diesem Beispiel die Rechte des Besitzers: |
25 | 25 |
26 $ ls -l foo | 26 $ ls -l foo |
27 -rw-rw-r-- 1 meillo users 0 May 12 07:32 foo | 27 -rw-rw-r-- 1 meillo users 0 May 12 07:32 foo |
59 ignorieren), dann macht man das mit: | 59 ignorieren), dann macht man das mit: |
60 | 60 |
61 $ cut -b -500 | 61 $ cut -b -500 |
62 | 62 |
63 Den Rest kann man sich mit `cut -b 501-' einfangen. Diese | 63 Den Rest kann man sich mit `cut -b 501-' einfangen. Diese |
64 Funktion ist insbesondere fuer POSIX wichtig, da man so | 64 Funktion ist insbesondere fuer POSIX wichtig, da man damit |
65 Textdateien mit begrenzter Zeilenlaenge erzeugen kann. | 65 Textdateien mit begrenzter Zeilenlaenge erzeugen kann. |
66 [ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html#tag_20_28_17 | 66 [ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html#tag_20_28_17 |
67 | 67 |
68 Wenn auch der Bytemodus neu eingefuehrt worden war, so sollte | 68 Wenn auch der Bytemodus neu eingefuehrt worden war, so sollte |
69 er sich doch nur so verhalten wie der alte Zeichenmodus | 69 er sich doch nur so verhalten wie der alte Zeichenmodus |
70 normalerweise schon implementiert war. Beim Zeichenmodus aber | 70 normalerweise schon implementiert war. Beim Zeichenmodus aber |
71 wurde eine neue Implementierungsweise gefordert. Das Problem | 71 wurde eine neue Implementierungsweise gefordert. Das Problem |
72 war also nicht, den neuen Bytemodus zu implementieren, sondern | 72 war folglich nicht, den neuen Bytemodus zu implementieren, sondern |
73 den Zeichenmodus neu zu implementieren. | 73 den Zeichenmodus neu zu implementieren. |
74 | 74 |
75 Neben dem Zeichen- und Bytemodus bietet cut noch den | 75 Neben dem Zeichen- und Bytemodus bietet cut noch den |
76 Feldmodus, den man mit `-f' einleitet. Mit ihm | 76 Feldmodus, den man mit `-f' einleitet. Mit ihm |
77 koennen Felder ausgewaehlt werden. Das Trennzeichen (per | 77 koennen Felder ausgewaehlt werden. Das Trennzeichen (per |
78 Default der Tab) kann mit `-d' geaendert werden. Es gilt sowohl | 78 Default der Tab) kann mit `-d' geaendert werden. Es gilt in |
79 fuer die Eingabe als auch fuer die Ausgabe. | 79 gleicher Weise fuer die Eingabe und die Ausgabe. |
80 | 80 |
81 Der typische Anwendungsfall fuer cut im Feldmodus ist die | 81 Der typische Anwendungsfall fuer cut im Feldmodus ist die |
82 Auswahl von Information aus der passwd-Datei. So z.B. der | 82 Auswahl von Information aus der passwd-Datei. Hier z.B. der |
83 Benutzername und seine ID: | 83 Benutzername und seine ID: |
84 | 84 |
85 $ cut -d: -f1,3 /etc/passwd | 85 $ cut -d: -f1,3 /etc/passwd |
86 root:0 | 86 root:0 |
87 bin:1 | 87 bin:1 |
95 Dieser Feldmodus ist fuer einfache tabellarische Dateien, | 95 Dieser Feldmodus ist fuer einfache tabellarische Dateien, |
96 wie eben die passwd, gut geeignet. Er kommt aber schnell an | 96 wie eben die passwd, gut geeignet. Er kommt aber schnell an |
97 seine Grenzen. Gerade der haeufige Fall, dass an Whitespace | 97 seine Grenzen. Gerade der haeufige Fall, dass an Whitespace |
98 in Felder geteilt werden soll, wird damit nicht abgedeckt. | 98 in Felder geteilt werden soll, wird damit nicht abgedeckt. |
99 Der Delimiter kann bei cut nur genau ein Zeichen sein. Es kann | 99 Der Delimiter kann bei cut nur genau ein Zeichen sein. Es kann |
100 also nicht sowohl an Leerzeichen als auch an Tabs aufgetrennt | 100 demnach nicht sowohl an Leerzeichen als auch an Tabs aufgetrennt |
101 werden. Auch unterteilt cut an jedem Trennzeichen. Zwei aneinander | 101 werden. Zudem unterteilt cut an jedem Trennzeichen. Zwei aneinander |
102 stehende Trennzeichen fuehren zu einem leeren Feld. Dieses | 102 stehende Trennzeichen fuehren zu einem leeren Feld. Dieses |
103 Verhalten widerspricht den Erwartungen, die man an die | 103 Verhalten widerspricht den Erwartungen, die man an die |
104 Verarbeitung einer Datei mit Whitespace-getrennten Feldern | 104 Verarbeitung einer Datei mit Whitespace-getrennten Feldern |
105 hat. Manche Implementierungen von cut, z.B. die von FreeBSD, | 105 hat. Manche Implementierungen von cut, z.B. die von FreeBSD, |
106 haben deshalb Erweiterungen, die das gewuenschte Verhalten | 106 haben deshalb Erweiterungen, die das gewuenschte Verhalten |
109 Faellen. | 109 Faellen. |
110 | 110 |
111 Awk bietet noch eine weitere Funktion, die cut missen | 111 Awk bietet noch eine weitere Funktion, die cut missen |
112 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei | 112 laesst: Das Tauschen der Feld-Reihenfolge in der Ausgabe. Bei |
113 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein | 113 cut ist die Reihenfolge der Feldauswahlangabe irrelevant; ein |
114 Feld kann selbst mehrfach angegeben werden. So gibt der Aufruf | 114 Feld kann selbst mehrfach angegeben werden. Dementsprechend gibt |
115 der Aufruf | |
115 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 | 116 von `cut -c 5-8,1,4-6' die Zeichen Nummer 1, 4, 5, 6, 7 und 8 |
116 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit | 117 in genau dieser Reihenfolge aus. Die Auswahl entspricht damit |
117 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird | 118 der Mengenlehre in der Mathematik: Jedes angegebene Feld wird |
118 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind | 119 Teil der Ergebnismenge. Die Felder der Ergebnismenge sind |
119 dabei immer gleich geordnet wie in der Eingabe. Um die Worte | 120 hierbei immer gleich geordnet wie in der Eingabe. Um die Worte |
120 der Manpage von Version 8 Unix wiederzugeben: ``In data base | 121 der Manpage von Version 8 Unix wiederzugeben: ``In data base |
121 parlance, it projects a relation.'' | 122 parlance, it projects a relation.'' |
122 [ http://man.cat-v.org/unix_8th/1/cut | 123 [ http://man.cat-v.org/unix_8th/1/cut |
123 Cut fuehrt also die Datenbankoperation Projektion auf | 124 Cut fuehrt demnach die Datenbankoperation Projektion auf |
124 Textdateien aus. Die Wikipedia erklaert das folgendermassen: | 125 Textdateien aus. Die Wikipedia erklaert das folgendermassen: |
125 | 126 |
126 Die Projektion entspricht der Projektionsabbildung aus der | 127 Die Projektion entspricht der Projektionsabbildung aus der |
127 Mengenlehre und kann auch Attributbeschränkung genannt | 128 Mengenlehre und kann auch Attributbeschränkung genannt |
128 werden. Sie extrahiert einzelne Attribute aus der | 129 werden. Sie extrahiert einzelne Attribute aus der |
140 III durchforstet, findet man die Quellcodedatei cut.c mit dem | 141 III durchforstet, findet man die Quellcodedatei cut.c mit dem |
141 Zeitstempel 1980-04-11. | 142 Zeitstempel 1980-04-11. |
142 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd | 143 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd |
143 Das ist die aelteste Manifestation des Programms, die ich | 144 Das ist die aelteste Manifestation des Programms, die ich |
144 aufstoebern konnte. Allerdings spricht die SCCS-ID im | 145 aufstoebern konnte. Allerdings spricht die SCCS-ID im |
145 Quellcode von Version 1.5. Es muss also noch eine | 146 Quellcode von Version 1.5. Es muss demzufolge noch eine |
146 Vorgeschichte geben. Zu dieser habe ich leider keinen Zugang | 147 Vorgeschichte geben. Zu dieser habe ich leider keinen Zugang |
147 gefunden. | 148 gefunden. |
148 XXX mail an TUHS | 149 XXX mail an TUHS |
149 | 150 |
150 Nun ein Blick auf die BSD-Linie: Dort ist mein fruehester | 151 Nun ein Blick auf die BSD-Linie: Dort ist mein fruehester |
163 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut | 164 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut |
164 Seine Manpage | 165 Seine Manpage |
165 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 | 166 [ http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Reno/src/usr.bin/cut/cut.1 |
166 erwaehnt bereits die erwartete Konformitaet mit POSIX.2. | 167 erwaehnt bereits die erwartete Konformitaet mit POSIX.2. |
167 Nun muss man wissen, dass POSIX.2 erst im September | 168 Nun muss man wissen, dass POSIX.2 erst im September |
168 1992 veroeffentlicht wurde, also gut zwei Jahren nachdem die | 169 1992 veroeffentlicht wurde, erst gut zwei Jahren nachdem die |
169 Manpage und das Programm geschrieben worden waren. Das Programm | 170 Manpage und das Programm geschrieben worden waren. Das Programm |
170 wurde folglich anhand von Arbeitsversionen des Standards | 171 wurde folglich anhand von Arbeitsversionen des Standards |
171 implementiert. Ein Blick in den Code bekraeftigt diese Vermutung. | 172 implementiert. Ein Blick in den Code bekraeftigt diese Vermutung. |
172 In der Funktion zum parsen der Feldauswahlliste findet sich | 173 In der Funktion zum parsen der Feldauswahlliste findet sich |
173 dieser Kommentar: | 174 dieser Kommentar: |
180 ein: | 181 ein: |
181 | 182 |
182 The elements in list can be repeated, can overlap, and can | 183 The elements in list can be repeated, can overlap, and can |
183 be specified in any order. | 184 be specified in any order. |
184 | 185 |
185 Auch listet Draft 11.2 alle drei Modi, waehrend in diesem | 186 Zudem listet Draft 11.2 alle drei Modi, waehrend in diesem |
186 BSD cut nur die zwei alten implementiert sind. Es koennte also | 187 BSD cut nur die zwei alten implementiert sind. Es koennte also |
187 sein, dass in Draft 9 der Bytemodus noch nicht vorhanden war. | 188 sein, dass in Draft 9 der Bytemodus noch nicht vorhanden war. |
188 Da ich keinen Zugang zu Draft 9 oder 10 finden konnte, war es mir | 189 Da ich keinen Zugang zu Draft 9 oder 10 finden konnte, war es mir |
189 leider nicht moeglich, diese Vermutung zu pruefen. XXX | 190 leider nicht moeglich, diese Vermutung zu pruefen. XXX |
190 | 191 |
207 | 208 |
208 Trotz der vielen Jahreszahlen aus den 80er Jahren gehoert cut, | 209 Trotz der vielen Jahreszahlen aus den 80er Jahren gehoert cut, |
209 aus Sicht des urspruenglichen Unix, zu den juengeren Tools. | 210 aus Sicht des urspruenglichen Unix, zu den juengeren Tools. |
210 Wenn cut auch ein Jahrzehnt aelter als Linux, der Kernel, ist, | 211 Wenn cut auch ein Jahrzehnt aelter als Linux, der Kernel, ist, |
211 so war Unix doch schon ueber zehn Jahre alt, als cut das | 212 so war Unix doch schon ueber zehn Jahre alt, als cut das |
212 erste Mal auftauchte. Insbesondere gehoerte cut auch noch nicht | 213 erste Mal auftauchte. Insbesondere gehoerte cut noch nicht |
213 zu Version 7 Unix, das die Ausgangsbasis aller modernen | 214 zu Version 7 Unix, das die Ausgangsbasis aller modernen |
214 Unix-Systeme darstellt. Die weit komplexeren Programme sed | 215 Unix-Systeme darstellt. Die weit komplexeren Programme sed |
215 und awk waren dort schon vertreten. Man muss sich also | 216 und awk waren dort schon vertreten. Man muss sich also |
216 fragen, warum cut ueberhaupt noch entwickelt wurde, wo es | 217 fragen, warum cut ueberhaupt noch entwickelt wurde, wo es |
217 schon zwei Programme gab, die die Funktion von cut abdecken | 218 schon zwei Programme gab, die die Funktion von cut abdecken |
362 moderne GNU-Variante mit fast 600 SLOCs. | 363 moderne GNU-Variante mit fast 600 SLOCs. |
363 | 364 |
364 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit | 365 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit |
365 SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc | 366 SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc |
366 -l') erstreckt sich ueber eine Spanne von Faktor 1.06 bei den | 367 -l') erstreckt sich ueber eine Spanne von Faktor 1.06 bei den |
367 aeltesten Vertretern bis zu Faktor 1.5 bei GNU. Der groesste | 368 aeltesten Vertretern bis zu Faktor 1.5 bei GNU. Den groessten |
368 Einflussfaktor darauf haben Leerzeilen, reine Kommentarzeilen und | 369 Einfluss darauf haben Leerzeilen, reine Kommentarzeilen und |
369 die Groesse des Lizenzblocks am Dateianfang. | 370 die Groesse des Lizenzblocks am Dateianfang. |
370 | 371 |
371 Betrachtet man die Abweichungen zwischen den logischen Codezeilen | 372 Betrachtet man die Abweichungen zwischen den logischen Codezeilen |
372 und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld | 373 und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld |
373 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung | 374 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung |
383 Die interne Struktur der Programmcodes (in C) ist meist aehnlich. | 384 Die interne Struktur der Programmcodes (in C) ist meist aehnlich. |
384 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente | 385 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente |
385 verarbeitet, gibt es im Normalfall eine Funktion, die die | 386 verarbeitet, gibt es im Normalfall eine Funktion, die die |
386 Feldauswahl in eine interne Datenstruktur ueberfuehrt. Desweiteren | 387 Feldauswahl in eine interne Datenstruktur ueberfuehrt. Desweiteren |
387 haben fast alle Implementierungen separate Funktionen fuer die | 388 haben fast alle Implementierungen separate Funktionen fuer die |
388 zwei bzw. drei Modi. Bei den POSIX-konformen Implementierungen | 389 zwei oder drei Modi. Bei den POSIX-konformen Implementierungen |
389 wird die `-b -n'-Kombination als weiterer Modus behandelt, und | 390 wird die `-b -n'-Kombination als weiterer Modus behandelt, und |
390 damit in einer eigenen Funktion umgesetzt. Nur bei der fruehen | 391 damit in einer eigenen Funktion umgesetzt. Nur bei der fruehen |
391 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante) | 392 System III-Implementierung (und seiner 4.3BSD-UWisc-Variante) |
392 wird ausser den Fehlerausgaben alles in der main-Funktion | 393 wird ausser den Fehlerausgaben alles in der main-Funktion |
393 erledigt. | 394 erledigt. |
407 gross genug sein sollte. | 408 gross genug sein sollte. |
408 | 409 |
409 | 410 |
410 Beschreibungen | 411 Beschreibungen |
411 | 412 |
412 Interessant ist auch ein Vergleich der Kurzbeschreibungen von | 413 Interessant ist zudem ein Vergleich der Kurzbeschreibungen von |
413 cut, wie sie sich in der Titelzeile der Manpages oder manchmal | 414 cut, wie sie sich in der Titelzeile der Manpages oder manchmal |
414 auch am Anfang der Quellcodedatei finden. Die folgende Liste | 415 am Anfang der Quellcodedatei finden. Die folgende Liste |
415 ist grob zeitlich geordnet und nach Abstammung gruppiert: | 416 ist grob zeitlich geordnet und nach Abstammung gruppiert: |
416 | 417 |
417 | 418 |
418 System III cut out selected fields of each line of a file | 419 System III cut out selected fields of each line of a file |
419 System III (src) cut and paste columns of a table (projection of a relation) | 420 System III (src) cut and paste columns of a table (projection of a relation) |
448 rueckblickendes Textdokument von Doug McIlroy, das das | 449 rueckblickendes Textdokument von Doug McIlroy, das das |
449 Auftreten der Tools in der Geschichte des Research Unix zum | 450 Auftreten der Tools in der Geschichte des Research Unix zum |
450 Thema hat. | 451 Thema hat. |
451 [ http://doc.cat-v.org/unix/unix-reader/contents.pdf | 452 [ http://doc.cat-v.org/unix/unix-reader/contents.pdf |
452 Eigentlich sollte seine Beschreibung der in Version 8 Unix | 453 Eigentlich sollte seine Beschreibung der in Version 8 Unix |
453 entsprechen. Die Abweichung koennte sowohl ein | 454 entsprechen. Die Abweichung koennte ein Uebertragungsfehler |
454 Uebertragungsfehler als auch eine nachtraegliche Korrektur | 455 oder eine nachtraegliche Korrektur sein. Alle uebrigen |
455 sein. Alle uebrigen Beschreibungen entstammen den Manpages. | 456 Beschreibungen entstammen den Manpages. |
456 | 457 |
457 Oft ist mit der Zeit die POSIX-Beschreibung uebernommen | 458 Oft ist mit der Zeit die POSIX-Beschreibung uebernommen |
458 oder an sie angeglichen worden, wie beispielsweise bei FreeBSD. | 459 oder an sie angeglichen worden, wie beispielsweise bei FreeBSD. |
459 [ https://svnweb.freebsd.org/base?view=revision&revision=167101 | 460 [ https://svnweb.freebsd.org/base?view=revision&revision=167101 |
460 | 461 |
461 Interessant ist, dass die GNU coreutils seit Anbeginn vom | 462 Interessant ist, dass die GNU coreutils seit Anbeginn vom |
462 Entfernen von Teilen der Eingabe sprechen, wohingegen die | 463 Entfernen von Teilen der Eingabe sprechen, wohingegen die |
463 Kommandozeilenangabe klar ein Auswaehlen darstellt. Die | 464 Kommandozeilenangabe klar ein Auswaehlen darstellt. Die |
464 Worte ``cut out'' sind vielleicht auch etwas zu | 465 Worte ``cut out'' sind vielleicht auch zu missverstaendlich. |
465 missverstaendlich. HP-UX hat sie deshalb praezisiert. | 466 HP-UX hat sie deshalb praezisiert. |
466 | 467 |
467 Auch beim Begriff, was selektiert wird, ist man sich | 468 Beim Begriff, was selektiert wird, ist man sich ebenfalls |
468 uneins. Die Einen reden von Feldern (POSIX), Andere von | 469 uneins. Die Einen reden von Feldern (POSIX), Andere von |
469 Abschnitten bzw. Teilen (BSD) und wieder Andere von Spalten | 470 Abschnitten bzw. Teilen (BSD) und wieder Andere von Spalten |
470 (Research Unix). Ironischerweise leistet sich gerade Version | 471 (Research Unix). Ironischerweise leistet sich gerade Version |
471 8 Unix, das eigentlich um eine sehr treffende Weltsicht | 472 8 Unix, das eigentlich um eine sehr treffende Weltsicht |
472 bemueht ist, mit ``rearrange columns of data'' die | 473 bemueht ist, mit ``rearrange columns of data'' die |