Provided by:
manpages-pl_20060617-3_all 
NAZWA
textutils - opis pakietu narzdzi tekstowych GNU
OD T/LUMACZA
Podrczniki man dla narzdzi tekstowych GNU nie s ju rozwijane.
Niniejsza strona podrcznika powstala jako tlumaczenie, uywanej przez
tworcow jako podstawowej, dokumentacji formatu info. W pliku, ktory
czytasz umieszczono cz dokumentacji dotyczc wspolnych cech i opcji
programow oraz informacje, ktore z ronych przyczyn nie znalazly si na
stronach opisujcych poszczegolne polecenia pakietu. Szczegolowe opisy
samych polece znajdziesz we wlaciwych, osobnych stronach podrcznika.
WSTP
Niniejszy podrcznik opisuje zestaw narzdzi tekstowych GNU w wersji 2.0.
Jak i inne podrczniki pakietu, i ten nie jest wyczerpujcy: nie
usilowano wyjani podstawowych poj w sposob odpowiedni dla nowicjuszy.
Zatem, jeli jeste zainteresowany, wlcz si, prosz, w udoskonalanie go.
Skorzysta na tym cala wspolnota GNU.
Narzdzia tekstowe GNU s w wikszoci zgodne ze standardem POSIX.2.
Bldy prosz zglasza, w jz.angielskim, do <bug-fileutils@gnu.org>.
Pamitaj, by zamieci numer wersji, architektur maszyny, pliki wejciowe i
inne informacje potrzebne do powielenia bldu: wprowadzane znaki, czego
si spodziewale, co otrzymale i dlaczego jest to le. Pliki diff s mile
widziane, ale prosz dolczy rownie opis problemu, gdy czasem ciko jest
wycign wnioski.
Podrcznik ten powstal pierwotnie na bazie uniksowych stron man
napisanych przez Davida MacKenzie i aktualizowanych przez Jima
Meyeringa. Autorytatywn dokumentacj jest obecnie dokumentacja w
formacie info; strony man nie s ju rozwijane i aktualizowane.
Franc,ois Pinard wykonal wstpn konwersj do formatu Texinfo. Karl Berry
wykonal indeksy, troch reorganizacji i edycji wynikow. Richard
Stallman wniosl swoj zwykly nieoceniony wgld w calo procesu.
ZAWARTO PAKIETU
Obecnie pakiet narzdzi tekstowych GNU zawiera dwadziecia kilka
programow:
Wypisywanie ca/loci plik'ow
cat lczenie i wypisywanie plikow
tac lczenie i wypisywanie odwroconych plikow
nl numerowanie linii i wypisywanie plikow
od wypisywanie plikow w formacie osemkowym i innych
Formatowanie zawartoci plik'ow
fmt reformatowanie akapitow tekstu
pr stronicowanie i kolumnowanie plikow do wydruku
fold zawijanie linii wejciowych do zadanej szerokoci
Wypisywanie czci plik'ow
head wypisywanie pocztku plikow
tail wypisywanie kocowki plikow
split podzial pliku na czci stalej wielkoci
csplit podzial pliku na czci zalene od kontekstu
Podsumowywanie plik'ow
wc wypisywanie liczby bajtow, slow i linii
sum wypisywanie sumy kontrolnej i liczby blokow
csum wypisywanie sumy CRC liczby blokow
md5sum wypisywanie lub sprawdzanie skrotu danych
Sortowanie i dzia/lania na plikach posortowanych
sort sortowanie plikow tekstowych
uniq pozostawianie unikalnych linii w pliku
comm porownywanie dwu posortowanych plikow liniami
ptx tworzenie indeksu permutacyjnego zawartoci pliku
tsort sortowanie topologiczne
Dzia/lania na polach wewntrz linii
cut wypisywanie wybranych czci linii
paste zlepianie linii plikow
join lczenie linii wedlug wspolnego pola
Dzia/lania na znakach
tr zamiana, ciskanie, usuwanie znakow
expand zamiana tabulacji na spacje
unexpand zamiana spacji na tabulacje
OPCJE WSP'OLNE
Pewne opcje dostpne s we wszystkich opisywanych programach (naprawd
powinien je przyjmowa kady z programow GNU).
--help Wywietla informacj o stosowaniu programu i list wszystkich
dostpnych opcji, pomylnie koczy prac.
--version
Wywietla numer wersji programu i pomylnie koczy prac.
Otwarcie skrzynki narzdziowej z programami
Ten rozdzial pierwotnie pojawil si w 'Linux Journal', volume 1, nr 2,
na kolumnie `What's GNU?'. Zostal napisany przez Arnolda Robbinsa.
Wprowadzenie
W tym miesicu artykul jest tylko ubocznie zwizany z Projektem GNU, gdy
opisuje kilka narzdzi GNU obecnych w systemie Linux i sposoby, na jakie
moesz z nich korzysta. Faktycznie artykul jest o filozofii "Narzdzi
programowych" w rozwijaniu i wykorzystywaniu programow.
Filozofia narzdzi programowych byla wanym i integralnym pojciem w
pocztkowym projekcie i rozwoju Uniksa (ktorego Linux i GNU s zasadniczo
klonami). Niestety, przy wspolczesnym nacisku intersieci i
blyskotliwych GUI, wydaje si, e idea ta spadla na pobocze. To wstyd,
poniewa zapewnia ona potny model mylowy do rozwizywania wielu rodzajow
problemow.
Sporo ludzi nosi w kieszeniach spodni szwajcarski scyzoryk. Scyzoryk
jest wygodnym narzdziem: ma kilka ostrzy, rubokrt, pincet, wykalaczk,
zestaw gwodzi, korkocig i moe kilka innych rzeczy. Do codziennych
drobnych, ronorodnych zada, gdzie potrzebujesz prostego narzdzia
ogolnego zastosowania, jest wlanie tym, o co chodzi.
Z drugiej strony, dowiadczony ciela nie buduje domu scyzorykiem.
Zamiast tego ma skrzynk wypchan specjalizowanymi narzdziami -- jest tam
pila, mlotek, rubokrt, strug i tak dalej. I dokladnie wie kiedy i gdzie
uy kadego z narzdzi. Nie przylapalby go na wbijaniu gwodzi rkojeci
rubokrtu.
Konstruktorzy Uniksa w Bell Labs byli calkiem zawodowymi programistami
i wyszkolonymi naukowcami komputerowymi. Zauwayli, e cho rozwizanie
wszystko-w-jednym moe przyciga uytkownika, gdy ma on tylko jeden
program do korzystania, w praktyce programy takie s
a. trudne do napisania,
b. trudne w konserwacji i usuwaniu bldow, oraz
c. trudne do rozbudowy, przystosowania do nowych sytuacji.
Uwaali, e zamiast tego, programy powinny by specjalizowanymi
narzdziami. Krotko mowic, kady program "powinien robi jedn rzecz
dobrze". Nie wicej i nie mniej. Takie programy s latwiejsze do
zaprojektowania, napisania i zrozumienia -- robi tylko jedn rzecz.
Ponadto zauwayli, e przy odpowiednim mechanizmie lczenia programow calo
jest wiksza od sumy skladowych. Wic kilka specjalizowanych programow
moesz zrealizowa konkretne zadanie, do ktorego aden z nich nie byl
projektowany i osign to duo szybciej i latwiej ni piszc dla niego
specjalizowany program. W dalszej czci artykulu zobaczymy kilka
(klasycznych) tego przykladow. Wanym dodatkowym punktem bylo to, e jeli
jest to niezbdne, naley najpierw zrobi narzdzia, ktore bd potrzebne,
jeeli nie ma si jeszcze odpowiednich w skrzynce narzdziowej.
Przekierowanie wejcia/wyjcia
Mam nadziej, e jeste obeznany z podstawami przekierowywania
wejcia/wyjcia w powloce, w szczegolnoci z pojciami "standardowego
wejcia", "standardowego wyjcia" i "standardowego wyjcia bldow
(diagnostycznego)". Zwile: "standardowe wejcie" jest rodlem danych, skd
pochodz dane. Program nie musi wiedzie ani dba o to, czy rodlem danych
jest plik dyskowy, klawiatura, tama magnetyczna czy nawet czytnik kart
perforowanych. Podobnie, "standardowe wyjcie" jest odplywem danych,
dokd dane splywaj. Program nie powinien ani wiedzie ani dba o to, gdzie
to moe by. Programy, ktore tylko czytaj swoje standardowe wejcie, robi
co z tymi danymi i wysylaj je na standardowe wyjcie, nazywane s
"filtrami", przez analogi do filtrow w wodocigach.
W powloce uniksowej bardzo latwo jest zestawi potoki danych: [tlum.:
ang.'pipeline' to 'rurocig' lub, w informatyce, 'potok']
program_tworzacy_dane | filtr1 | .... | filtrN > koncowe.dane
Zaczynamy od utworzenia surowych danych pierwotnych. Kady z filtrow
stosuje pewne kolejne przeksztalcenie danych, a wychodzc z potoku bd
one mie podan posta.
To jest eleganckie i dobre dla standardowego wejcia i standardowego
wyjcia. A gdzie si tu pojawia standardowe wyjcie bldow? Co, pomylmy o
'filtr1' w powyszym potoku. Co si stanie, jeli napotka on bld w
przyjmowanych danych? Jeeli wypisze komunikat o bldzie na standardowe
wyjcie, to po prostu zniknie on w potoku wejcia do 'filtr2' a uytkownik
zapewne nigdy go nie zobaczy. Zatem programici potrzebuj miejsca, gdzie
mogliby wysyla komunikaty o bldach, tak by uytkownik je zauwayl. Jest
to standardowe wyjcie diagnostyczne i zwykle zwizane jest z twoj konsol
lub oknem, nawet jeli przekierowale standardowe wyjcie programu gdzie
poza ekran.
Aby programy filtrujce mogly wspoldziala, musi zosta uzgodniony format
danych. Najprostszym i najlatwiejszym w wykorzystaniu formatem s zwykle
wiersze tekstu. Uniksowe pliki danych s zazwyczaj po prostu
strumieniami bajtow, o wierszach zakoczonych znakiem LF ASCII (Line
Feed - wysuw linii), konwencjonalnie w literaturze dotyczcej Uniksa
nazywanym "znakiem nowej linii" (newline). (Jest to '\n' jeli
programujesz w C.) To format stosowany przez wszystkie tradycyjne
programy filtrujce. (Wiele wczeniejszych systemow operacyjnych
wypracowalo rodki i specjalizowane programy do obslugi danych
binarnych. Unix zawsze wystrzegal si takich rzeczy, zgodnie z filozofi,
e najlatwiej jest moc przeglda i modyfikowa dane po prostu edytorem
tekstu.)
Dobrze, starczy wprowadzenia. Przyjrzyjmy si niektorym narzdziom, a
wtedy zobaczymy jak wiza je ze sob na ciekawe sposoby. W dalszych
rozwaaniach pokaemy tylko te opcje wiersza polece, ktore nas interesuj.
Tak jak zawsze powiniene, dwukrotnie sprawd dokumentacj systemow.
Znajdziesz tam pelne opisy.
Polecenie 'who'
Pierwszym programem jest polecenie 'who'. Samodzielne, tworzy list
aktualnie zalogowanych uytkownikow. Mimo, e pisz to w systemie
jednouytkownikowym, bdziemy udawa, e zalogowanych jest kilka osob:
$ who
arnold console Jan 22 19:57
miriam ttyp0 Jan 23 14:19(:0.0)
bill ttyp1 Jan 21 09:32(:0.0)
arnold ttyp2 Jan 23 20:48(:0.0)
Znak '$' jest tu zwyczajow zacht powloki, po ktorej napisalem 'who'.
Zalogowane s trzy osoby, w tym ja dwukrotnie. W tradycyjnych systemach
Unix nazwy uytkownikow nigdy nie maj wicej ni osiem znakow. Ta mala
ciekawostka przyda si poniej. Wyjcie z 'who' wyglda ladnie, ale dane
nie s a tak pasjonujce.
Polecenie 'cut'
Nastpnym programem, ktoremu si przygldniemy jest polecenie 'cut'
(wytnij). Wycina ono kolumny lub pola z danych wejciowych. Na
przyklad, moemy nakaza mu wypisanie tylko nazwy zgloszeniowej i
nazwiska z pliku /etc/passwd. Plik posiada siedem pol, rozdzielonych
dwukropkami:
arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/ksh
Do pobrania pierwszego i pitego pola, uylibymy takiego wycinania:
$ cut -d: -f1,5 /etc/passwd
root:Operator
...
arnold:Arnold D. Robbins
miriam:Miriam A. Robbins
...
Z opcj '-c', 'cut' wycina konkretne znaki (tj. kolumny) wierszy
wejciowych. To polecenie wyglda na przydatne do filtrowania danych.
Polecenie 'sort'
Nastpnie przyjrzymy si 'sort'. To jedno z najpotniejszych polece w
systemie typu uniksowego. Czsto bdziesz go uywal przy konstruowaniu
ronych wymylnych rurocigow. 'sort' czyta i sortuje kady z podanych w
wierszu polece plikow. Nastpnie scala uporzdkowane dane i wypisuje na
standardowe wyjcie. Jeli w wierszu polece nie poda si adnych nazw
plikow to czyta standardowe wejcie (w ten sposob robimy ze filtr).
Sortowanie oparte jest na leksykograficznym porzdku znakow lub
kryteriach porzdkowania zadanych przez uytkownika.
Polecenie `uniq'
Na koniec (przynajmniej na razie), przygldniemy si programowi 'uniq'.
Przy sortowaniu danych czsto uzyskasz powtorzone wiersze, wiersze,
ktore s identyczne. Zazwyczaj potrzebujesz tylko jednego wystpienia
kadego z nich. Tu wlanie pojawia si 'uniq'. Czyta on ze swego
standardowego wejcia, spodziewajc si, e jest ono posortowane. Wypisuje
tylko jeden egzemplarz kadego zduplikowanego wiersza. 'uniq' ma kilka
opcji. W dalszym cigu wykorzystamy opcj '-c', wypisujc przed
niepowtarzalnym wierszem ile razy wystpil on w danych wejciowych.
/Lczenie narzdzi
Zalomy teraz, e mamy system BBS z zalogowanymi dziesitkami uytkownikow.
Zarzdzajcy chc, by operator systemu (SysOp) napisal program tworzcy
posortowan list zalogowanych uytkownikow. Co wicej, nawet jeli
uytkownik jest zalogowany wielokrotnie, jego nazwa powinna w wyniku
pojawi si tylko raz.
SysOp moglby si z dokumentacj systemow i napisa program w C, ktory by
to robil. Kosztowaloby to pewnie kilkaset linii kodu i okolo dwu godzin
pisania, testowania i usuwania bldow. Jednak, znajc narzdzia
programowe, SysOp moe zamiast tego zacz od utworzenia tylko listy
zalogowanych uytkownikow:
$ who | cut -c1-8
arnold
miriam
bill
arnold
Nastpnie, posortowa list:
$ who | cut -c1-8 | sort
arnold
arnold
bill
miriam
Na koniec, przepuci posortowan list przez 'uniq', by wypieli duplikaty:
$ who | cut -c1-8 | sort | uniq
arnold
bill
miriam
Polecenie 'sort' faktycznie posiada opcj '-u', ktora robi to, co
'uniq'. Jednak 'uniq' ma inne zastosowania, w ktorych nie mona go
zastpi przez 'sort -u'.
SysOp umieszcza ten potok w skrypcie powloki i udostpnia go wszystkim
uytkownikom systemu:
# cat > /usr/local/bin/listusers
who | cut -c1-8 | sort | uniq
^D
# chmod +x /usr/local/bin/listusers
Warto tu zauway cztery zalety. Po pierwsze, przy pomocy zaledwie
czterech programow, w jednej linii polece, SysOp mogl oszczdzi okolo
dwu godzin pracy. Co wicej, potok powloki jest prawie tak samo wydajny,
jak bylby program w C, a o wiele bardziej efektywny jeli chodzi o czas
programisty. Czas ludzki jest o wiele kosztowniejszy ni czas komputera,
a w naszym wspolczesnym spoleczestwie, gdzie "nigdy nie ma do czasu by
wszystko zrobi", zaoszczdzenie dwu godzin czasu programisty jest nie
byle jakim wyczynem.
Po drugie, rownie istotne jest podkrelenie, e przy pomocy _polczenia_
narzdzi moliwe jest wykonanie specyficznego zadania, nigdy nie
przewidywanego przez autorow pojedynczych programow.
Po trzecie, wartociowe jest te stopniowe budowanie potoku, jak to
zrobilimy. Pozwala ono na przygldnicie si danym na kadym etapie
przebiegu potoku, co pomaga uzyska pewno, e rzeczywicie poprawnie
uywasz narzdzi.
Na koniec, dziki zapakowaniu potoku w skrypt powloki, inni uytkownicy
mog korzysta z twojego polecenia, nie muszc pamita o zawartoci tego
wymylnego opakowania. Z punktu widzenia sposobu uruchamiania, skrypty
powloki i skompilowane programy s nierozronialne.
Po uprzedniej rozgrzewce, przypatrzymy si dwu kolejnym, bardziej
skomplikowanym potokom. Potrzebujemy dla nich wprowadzi jeszcze dwa
narzdzia.
Pierwszym jest polecenie 'tr', oznaczajce "transliteracj". Polecenie
'tr' wymienia znaki, dzialajc na zasadzie znak-na-znak. Zwykle
stosowane jest do takich rzeczy jak odwzorowanie duych liter na male.
$ echo ThIs ExAmPlE HaS MIXED case! | tr '[A-Z]' '[a-z]'
this example has mixed case!
Interesuje nas kilka opcji:
-c dziala na dopelnieniu wskazanych znakow, tj. dzialania odnosz si
do znakow spoza zadanego zestawu
-d usuwa z wyniku znaki okrelone w pierwszym zestawie
-s ciska w wyniku powtorzone znaki w pojedynczy znak.
Za chwil bdziemy korzysta ze wszystkich trzech opcji.
Innym poleceniem, ktoremu si przyjrzymy jest 'comm'. Pobiera ono dwa
posortowane pliki jako dane wejciowe i wypisuje ich wiersze w trzech
kolumnach. Kolumny wynikowe s unikalnymi wierszami z pierwszego pliku,
unikalnymi wierszami z drugiego pliku i wierszami danych wspolnymi dla
obu. Opcje '1', '-2' i '3' pomijaj odpowiednie kolumny. Nie jest to
intuicyjne i wymaga pewnego przywyknicia. Na przyklad:
$ cat f1
11111
22222
33333
44444
$ cat f2
00000
22222
33333
55555
$ comm f1 f2
00000
11111
22222
33333
44444
55555
Pojedyncza kreska jako nazwa pliku nakazuje 'comm' czytanie
standardowego wejcia zamiast zwyklego pliku.
Jestemy teraz gotowi do skonstruowania wymylnego potoku. Pierwszym
zastosowaniem jest licznik czstoci slow. Pomaga autorowi stwierdzi, czy
nie naduywa on pewnych slow.
Pierwszym krokiem jest zmiana wielkoci wszystkich liter z pliku
wejciowego na jedn wielko. "to" i "To" przy zliczaniu s tym samym
slowem.
$ tr '[A-Z]' '[a-z]' < whats.gnu | ...
[tlum.: zauwa, e dla jzyka polskiego, podobnie jak w nastpnym kroku,
naley uwzgldni dodatkowo nasze znaki diakrytyczne. Mona dolczy je do
podanego zakresu lub, lepiej, posluy si klas znakow i ustawieniami
narodowymi - zobacz tr(1).]
Nastpnym krokiem jest pozbycie si znakow przestankowych. Slowa cytowane
i niecytowane powinny by traktowane identycznie; najlatwiej bdzie po
prostu wyrzuci zawadzajc interpunkcj.
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' | ...
Drugie polecenie 'tr' dziala na dopelnieniu podanych znakow, ktorymi s
litery, cyfry, podkrelenie i odstp. ' 12' oznacza znak nowej linii,
naley go pozostawi. Dla dobrego pomiaru w dzialajcym skrypcie powinien
by te zawarty znak tabulacji (ASCII tab).
Na tym etapie, mamy dane skladajce si ze slow rozdzielonych odstpami.
Slowa zawieraj wylcznie znaki alfanumeryczne i znak podkrelenia.
Nastpnym krokiem jest rozbicie danych na czci tak, bymy mieli po jednym
slowie w wierszu. Jak wkrotce zobaczymy, znacznie ulatwia to zliczanie.
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' |
> tr -s '[ ]' ' 12' | ...
To polecenie zamienia odstpy w znaki nowej linii. Opcja '-s' ciska
wielokrotne znaki nowej linii wyniku w pojedynczy. Pomaga nam to unikn
pustych wierszy. (Znak '>' jest tu wtornym znakiem zachty powloki.
Powloka wypisuje go, gdy zauway, e nie zakoczyle wpisywania calego
polecenia.)
Teraz mamy dane skladajce si z jednego slowa w kadym wierszu, bez
znakow interpunkcyjnych, wszystkie pisane jedn wielkoci. Jestemy
gotowi do zliczania kadego z nich:
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' |
> tr -s '[ ]' ' 12' | sort | uniq -c | ...
Na tym etapie, dane mog wyglda jako tak:
60 a
2 able
6 about
1 above
2 accomplish
1 acquire
1 actually
2 additional
Wynik jest posortowany wedlug slow, nie wedlug liczby wystpie!
Chcielibymy natomiast mie jako pierwsze najczciej uywane slowa. Na
szczcie, latwo to osign przy pomocy dwu dodatkowych opcji 'sort':
-n wykonuje sortowanie liczbowe, a nie tekstowe
-r odwraca kolejno sortowania
Ostateczny potok wyglda tak:
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' |
> tr -s '[ ]' ' 12' | sort | uniq -c | sort -nr
156 the
60 a
58 to
51 of
51 and
...
No, no! Sporo do opowiadania. Nadal jednak obowizuj te same zasady.
Przy pomocy szeciu polece, w dwu wierszach (faktycznie jednej dlugiej
linii podzielonej dla wygody), stworzylimy program, ktory robi co
ciekawego i poytecznego, w duo krotszym czasie ni moglibymy napisa
program w C robicy to samo.
Niewielkie zmiany w powyszym potoku mog nam da prosty korektor pisowni!
Do stwierdzenia, czy napisale poprawnie jakie slowo wystarczy, e
poszukasz go w slowniku. Jeli w nim nie wystpuje, to moliwe, e twoja
pisownia jest nieprawidlowa. Tak wic, potrzebujemy slownika. Jeeli masz
dystrybucj Slackware Linux, to plik '/usr/lib/ispell/ispell.words' jest
posortowanym, zawierajcym 38.400 slow, slownikiem.
Zatem, jak porowna nasz plik ze slownikiem? Jak poprzednio, utworzymy
posortowan list slow, po jednym w wierszu:
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' |
> tr -s '[ ]' ' 12' | sort -u | ...
Teraz potrzebujemy tylko listy slow, ktorych NIE MA w slowniku. Tu
wlanie pojawia si polecenie 'comm'.
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ 12]' |
> tr -s '[ ]' ' 12' | sort -u |
> comm -23 - /usr/lib/ispell/ispell.words
Opcje '-2' i '-3' likwiduj wiersze wystpujce tylko slowniku (drugi
plik), i wystpujce w obu plikach. Wiersze obecne tylko w pierwszym
pliku (standardowe wejcie, nasz strumie slow), s slowami, ktorych nie
ma w slowniku. S to prawdopodobne bldy pisowni. Taki potok byl
pierwszym etapem budowy korektora pisowni w Uniksie.
Istnieje jeszcze kilka innych narzdzi wymagajcych krotkiej wzmianki.
grep szuka w plikach tekstu pasujcego do wyraenia regularnego
egrep jak 'grep', ale z bardziej rozbudowanymi wyraeniami regularnymi
wc zlicza wiersze, slowa, znaki
tee kopiuje dane do plikow i na standardowe wyjcie; dziala jak T-
ksztaltka w rurocigu danych
sed edytor strumieniowy, zaawansowane narzdzie
awk jzyk manipulacji danymi, kolejne zaawansowane narzdzie
Filozofia narzdzi programowych daje te nastpujc rad: "Niech kto inny
zrobi trudn cz pracy". To znaczy, we co, co zaspokoi wikszo twoich
potrzeb, a nastpnie przeksztalcaj dalej, a uzyskasz podan posta.
Podsumowujc:
1. Kady program powinien robi jedn rzecz, ale dobrze. Nie wicej,
nie mniej.
2. Lczenie programow w odpowiedni sposob prowadzi do rezultatu,
gdzie calo jest wiksza od sumy czci. Prowadzi te do nowatorskich
zastosowa programow, ktorych ich autorzy nawet sobie nie
wyobraali.
3. Programy nigdy nie powinny wypisywa dodatkowych danych
naglowkowych czy koczcych, gdy moglyby one zosta przeslane
potokiem. (Cecha, o ktorej wczeniej nie wspominalimy).
4. Niech kto inny wykona trudn cz roboty.
5. Znaj swoje narzdzia! Kadego programu uywaj we wlaciwy sposob.
Jeeli nie masz odpowiedniego narzdzia - zrob je.
W chwili powstania tego artykulu, wszystkie omawiane programy byly
dostpne przez anonimowe ftp z prep.ai.mit.edu jako
/pub/gnu/textutils-1.9.tar.gz. Wersja 1.9 byla wowczas biec. Sprawd w
najbliszym archiwum GNU jaka wersja jest aktualnie bieca. Glown
siedzib archiwum jest obecnie ftp.gnu.org.
Nic z tego, co przedstawilem w tym artykule nie jest nowe. Filozofia
Narzdzi Programowych zostala po raz pierwszy wprowadzona w ksice
'Software Tools', Briana Kernighana i P.J. Plaugera (Addison-Wesley,
ISBN 0-201-03669-X). Ksika ta pokazywala jak pisa i wykorzystywa
narzdzia programowe. Zostala napisana w 1976, korzystajc z
preprocesora FORTRAN-u o nazwie 'ratfor' (RATional FORtran). Wowczas C
nie byl tak wszechobecny jak dzi. FORTRAN byl. Ostatni rozdzial
przedstawial 'ratfor' dla procesora FORTRAN-u, napisany w 'ratforze'.
'ratfor' wyglda bardzo podobnie do C -- jeli znasz C, nie bdziesz mie
adnych klopotow ze zrozumieniem kodu.
W 1981 ksika ta zostala zaktualizowana i udostpniona jako 'Software
Tools in Pascal' (Addison-Wesley, ISBN 0-201-10342-7). Obie ksiki s
nadal drukowane i s rzeczywicie warte przeczytania jeli jeste
programist. Z pewnoci bardzo zmienily moj punkt widzenia na
programowanie.
Pocztkowo programy z obu ksiek byly dostpne (na 9-calowej tamie) z
Addison-Wesley. Niestety, ju tak nie jest, mimo e moesz znale kopie
rozproszone w Internecie. Przez wiele lat dzialala Software Tools Users
Group - Grupa Uytkownikow Narzdzi Programowych, ktorej czlonkowie
przenieli pierwotne programy 'ratforu' na niemal kady system
komputerowy z kompilatorem FORTRAN-u. Popularno grupy zanikla w polowie
lat 80-tych, gdy Unix zaczl rozpowszechnia si poza uniwersytetami.
Przy obecnym rozmnoeniu kodu GNU i innych klonow programow uniksowych,
programom tym powica si teraz niewiele uwagi. Wspolczesne wersje C s o
wiele wydajniejsze i robi wicej ni te programy. Niemniej jednak, ksiki
te s niezrownane jako opis dobrego stylu programowania, gloszc wci cenn
filozofi. Gorco je polecam.
Podzikowania: chcialbym wyrazi sw wdziczno Brianowi Kernighanowi z Bell
Labs, pierwszemu Kowalowi Narzdzi Programowych, za przejrzenie tego
artykulu.
ZOBACZ TAKE
cat(1) lczenie i wypisywanie plikow
comm(1) porownywanie dwu posortowanych plikow liniami
csplit(1) podzial pliku na czci zalene od kontekstu
csum(1) wypisywanie sumy CRC liczby blokow
cut(1) wypisywanie wybranych czci linii
expand(1) zamiana tabulacji na spacje
fmt(1) reformatowanie akapitow tekstu
fold(1) zawijanie linii wejciowych do zadanej szerokoci
head(1) wypisywanie pocztku plikow
join(1) lczenie linii wedlug wspolnego pola
md5sum(1) wypisywanie lub sprawdzanie skrotu danych
nl(1) numerowanie linii i wypisywanie plikow
od(1) wypisywanie plikow w formacie osemkowym i innych
paste(1) zlepianie linii plikow
pr(1) stronicowanie i kolumnowanie plikow do wydruku
ptx(1) tworzenie indeksu permutacyjnego zawartoci pliku
sort(1) sortowanie plikow tekstowych
split(1) podzial pliku na czci stalej wielkoci
sum(1) wypisywanie sumy kontrolnej i liczby blokow
tac(1) lczenie i wypisywanie odwroconych plikow
tail(1) wypisywanie kocowki plikow
tr(1) zamiana, ciskanie, usuwanie znakow
tsort(1) sortowanie topologiczne
unexpand(1) zamiana spacji na tabulacje
uniq(1) pozostawianie unikalnych linii w pliku
wc(1) wypisywanie liczby bajtow, slow i linii
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.