comparison cut.txt @ 18:b1e7b45fb3c8

Anmerkungen von Michi eingearbeitet
author markus schnalke <meillo@marmaro.de>
date Tue, 19 May 2015 07:30:07 +0200
parents 08f539a5445d
children a62964d0cc54
comparison
equal deleted inserted replaced
17:08f539a5445d 18:b1e7b45fb3c8
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. 78 Default der Tab) kann mit `-d' geaendert werden. Es gilt sowohl
79 fuer die Eingabe als auch fuer die Ausgabe.
79 80
80 Der typische Anwendungsfall fuer cut im Feldmodus ist die 81 Der typische Anwendungsfall fuer cut im Feldmodus ist die
81 Auswahl von Information aus der passwd-Datei. So z.B. der 82 Auswahl von Information aus der passwd-Datei. So z.B. der
82 Benutzername und seine ID: 83 Benutzername und seine ID:
83 84
306 307
307 Nun zum Test der cut-Implementierung. Hat man ein UTF-8-System, 308 Nun zum Test der cut-Implementierung. Hat man ein UTF-8-System,
308 dann sollte sich eine POSIX-konforme Implementierung folgendermassen 309 dann sollte sich eine POSIX-konforme Implementierung folgendermassen
309 verhalten: 310 verhalten:
310 311
311 $ echo ä | ./cut -c 1 | od -c 312 $ echo ä | cut -c 1 | od -c
312 0000000 303 244 \n 313 0000000 303 244 \n
313 0000003 314 0000003
314 315
315 $ echo ä | ./cut -b 1 | od -c 316 $ echo ä | cut -b 1 | od -c
316 0000000 303 \n 317 0000000 303 \n
317 0000002 318 0000002
318 319
319 $ echo ä | ./cut -b 1 -n | od -c 320 $ echo ä | cut -b 1 -n | od -c
320 0000000 \n 321 0000000 \n
321 0000001 322 0000001
322 323
323 Bei einer Pseudo-POSIX-Implementierung ist die Ausgabe in 324 Bei einer Pseudo-POSIX-Implementierung ist die Ausgabe in
324 allen drei Faellen wie die mittlere: Es wird das erste Byte 325 allen drei Faellen wie die mittlere: Es wird das erste Byte
360 die alte GNU-Version mit 340-390 SLOCs. Und schliesslich (4) die 361 die alte GNU-Version mit 340-390 SLOCs. Und schliesslich (4) die
361 moderne GNU-Variante mit fast 600 SLOCs. 362 moderne GNU-Variante mit fast 600 SLOCs.
362 363
363 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit 364 Die Abweichung zwischen logischen Codezeilen (SLOC, ermittelt mit
364 SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc 365 SLOCcount) und der Anzahl von Zeilenumbruechen in der Datei (`wc
365 -l') erstreckt sich ueber einen Faktor von 1.06 bei den aeltesten 366 -l') erstreckt sich ueber eine Spanne von Faktor 1.06 bei den
366 Vertretern bis zu Faktor 1.5 bei GNU. Der groesste 367 aeltesten Vertretern bis zu Faktor 1.5 bei GNU. Der groesste
367 Einflussfaktor darauf sind Leerzeilen, reine Kommentarzeilen und 368 Einflussfaktor darauf haben Leerzeilen, reine Kommentarzeilen und
368 die Groesse des Lizenzblocks am Dateianfang. 369 die Groesse des Lizenzblocks am Dateianfang.
369 370
370 Betrachtet man die Abweichungen zwischen den logischen Codezeilen 371 Betrachtet man die Abweichungen zwischen den logischen Codezeilen
371 und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld 372 und der Dateigroesse (`wc -c'), so pendelt das Teilnehmerfeld
372 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung 373 zwischen 25 und 30 Bytes je Anweisung. Die Heirloom-Implementierung
373 weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit 374 weicht mit nur 21 nach unten ab, die GNU-Implementierungen mit
374 fast 40 nach oben. Bei GNU liegt dies hauptsaechlich an deren 375 fast 40 nach oben. Bei GNU liegt dies hauptsaechlich an deren
375 Programmierstil, mit spezieller Einrueckung und langen Bezeichnern. 376 Programmierstil, mit spezieller Einrueckung und langen Bezeichnern.
376 Ob man die Heirloom-Implementierung als besonders kryptisch 377 Ob man die Heirloom-Implementierung als besonders kryptisch
377 oder als besonders elegant bezeichnen will, das soll der 378 oder als besonders elegant bezeichnen will, das soll der
378 eigenen Einschaetzung des Lesers ueberlassen bleiben. 379 eigenen Einschaetzung des Lesers ueberlassen bleiben. Vor allem
380 der Vergleich mit einer GNU-Implementierung ist eindrucksvoll.
379 381
380 382
381 Die interne Struktur der Programmcodes (in C) ist meist aehnlich. 383 Die interne Struktur der Programmcodes (in C) ist meist aehnlich.
382 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente 384 Neben der obligatorischen main-Funktion, die die Kommandozeilenargumente
383 verarbeitet, gibt es im Normalfall eine Funktion, die die 385 verarbeitet, gibt es im Normalfall eine Funktion, die die
395 Zeilenlaenge. Bei System III sind beide Groessen auf 512 begrenzt. 397 Zeilenlaenge. Bei System III sind beide Groessen auf 512 begrenzt.
396 4.3BSD-Reno und die BSDs der 90er Jahre haben ebenfalls fixe 398 4.3BSD-Reno und die BSDs der 90er Jahre haben ebenfalls fixe
397 Grenzen (_BSD_LINE_MAX bzw. _POSIX2_LINE_MAX). Bei modernen 399 Grenzen (_BSD_LINE_MAX bzw. _POSIX2_LINE_MAX). Bei modernen
398 FreeBSDs, NetBSDs, bei allen GNU-Implementierungen und bei 400 FreeBSDs, NetBSDs, bei allen GNU-Implementierungen und bei
399 Heirloom kann sowohl die Felderanzahl als auch die maximale 401 Heirloom kann sowohl die Felderanzahl als auch die maximale
400 Zeilenlaenge beliebig gross werden; der Speicher dafür wird 402 Zeilenlaenge beliebig gross werden; der Speicher dafuer wird
401 dynamisch alloziiert. OpenBSD ist ein Hybrid aus fixer 403 dynamisch alloziiert. OpenBSD ist ein Hybrid aus fixer
402 Maximalzahl an Feldern, aber beliebiger Zeilenlaenge. Die 404 Maximalzahl an Feldern, aber beliebiger Zeilenlaenge. Die
403 begrenzte Felderanzahl scheint jedoch kein Praxisproblem 405 begrenzte Felderanzahl scheint jedoch kein Praxisproblem
404 darzustellen, da _POSIX2_LINE_MAX mit mindestens 2048 durchaus 406 darzustellen, da _POSIX2_LINE_MAX mit mindestens 2048 durchaus
405 gross genug sein sollte. 407 gross genug sein sollte.
440 POSIX cut out selected fields of each line of a file 442 POSIX cut out selected fields of each line of a file
441 443
442 444
443 Die mit ``(src)'' markierten Beschreibungen sind aus dem 445 Die mit ``(src)'' markierten Beschreibungen sind aus dem
444 jeweiligen Quellcode entnommen. Der POSIX-Eintrag enthaelt 446 jeweiligen Quellcode entnommen. Der POSIX-Eintrag enthaelt
445 die Beschreibung des Standards. Der ``Unix Reader'' ist ein 447 die Beschreibung im Standard. Der ``Unix Reader'' ist ein
446 rueckblickendes Textdokument von Doug McIlroy, das das 448 rueckblickendes Textdokument von Doug McIlroy, das das
447 Auftreten von Tools in der Geschichte des Research Unix zum 449 Auftreten der Tools in der Geschichte des Research Unix zum
448 Thema hat. 450 Thema hat.
449 [ http://doc.cat-v.org/unix/unix-reader/contents.pdf 451 [ http://doc.cat-v.org/unix/unix-reader/contents.pdf
450 Eigentlich sollte seine Beschreibung der in Version 8 Unix 452 Eigentlich sollte seine Beschreibung der in Version 8 Unix
451 entsprechen. Die Abweichung koennte sowohl ein 453 entsprechen. Die Abweichung koennte sowohl ein
452 Uebertragungsfehler als auch eine nachtraegliche Korrektur 454 Uebertragungsfehler als auch eine nachtraegliche Korrektur