Provided by: manpages-pl_20060617-3_all bug

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.