home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / textutils-1.19-bin.lha / info / textutils.info-3 (.txt) < prev   
GNU Info File  |  1996-10-12  |  38KB  |  695 lines

  1. This is Info file textutils.info, produced by Makeinfo-1.64 from the
  2. input file /ade-src/fsf/textutils/doc/textutils.texi.
  3. START-INFO-DIR-ENTRY
  4. * Text utilities: (textutils).          GNU text utilities.
  5. * cat: (textutils)cat invocation.               Concatenate and write files.
  6. * cksum: (textutils)cksum invocation.           Print POSIX CRC checksum.
  7. * comm: (textutils)comm invocation.             Compare sorted files by line.
  8. * csplit: (textutils)csplit invocation.         Split by context.
  9. * cut: (textutils)cut invocation.               Print selected parts of lines.
  10. * expand: (textutils)expand invocation.         Convert tabs to spaces.
  11. * fmt: (textutils)fmt invocation.               Reformat paragraph text.
  12. * fold: (textutils)fold invocation.             Wrap long input lines.
  13. * head: (textutils)head invocation.             Output the first part of files.
  14. * join: (textutils)join invocation.             Join lines on a common field.
  15. * md5sum: (textutils)md5sum invocation.         Print or check message-digests.
  16. * nl: (textutils)nl invocation.                 Number lines and write files.
  17. * od: (textutils)od invocation.                 Dump files in octal, etc.
  18. * paste: (textutils)paste invocation.           Merge lines of files.
  19. * pr: (textutils)pr invocation.                 Paginate or columnate files.
  20. * sort: (textutils)sort invocation.             Sort text files.
  21. * split: (textutils)split invocation.           Split into fixed-size pieces.
  22. * sum: (textutils)sum invocation.               Print traditional checksum.
  23. * tac: (textutils)tac invocation.               Reverse files.
  24. * tail: (textutils)tail invocation.             Output the last part of files.
  25. * tr: (textutils)tr invocation.                 Translate characters.
  26. * unexpand: (textutils)unexpand invocation.     Convert spaces to tabs.
  27. * uniq: (textutils)uniq invocation.             Uniqify files.
  28. * wc: (textutils)wc invocation.                 Byte, word, and line counts.
  29. END-INFO-DIR-ENTRY
  30.    This file documents the GNU text utilities.
  31.    Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
  32.    Permission is granted to make and distribute verbatim copies of this
  33. manual provided the copyright notice and this permission notice are
  34. preserved on all copies.
  35.    Permission is granted to copy and distribute modified versions of
  36. this manual under the conditions for verbatim copying, provided that
  37. the entire resulting derived work is distributed under the terms of a
  38. permission notice identical to this one.
  39.    Permission is granted to copy and distribute translations of this
  40. manual into another language, under the above conditions for modified
  41. versions, except that this permission notice may be stated in a
  42. translation approved by the Foundation.
  43. File: textutils.info,  Node: Putting the tools together,  Prev: The `uniq' command,  Up: Opening the software toolbox
  44. Putting the tools together
  45. ==========================
  46.    Now, let's suppose this is a large BBS system with dozens of users
  47. logged in.  The management wants the SysOp to write a program that will
  48. generate a sorted list of logged in users.  Furthermore, even if a user
  49. is logged in multiple times, his or her name should only show up in the
  50. output once.
  51.    The SysOp could sit down with the system documentation and write a C
  52. program that did this. It would take perhaps a couple of hundred lines
  53. of code and about two hours to write it, test it, and debug it.
  54. However, knowing the software toolbox, the SysOp can instead start out
  55. by generating just a list of logged on users:
  56.      $ who | cut -c1-8
  57.      arnold
  58.      miriam
  59.      bill
  60.      arnold
  61.    Next, sort the list:
  62.      $ who | cut -c1-8 | sort
  63.      arnold
  64.      arnold
  65.      bill
  66.      miriam
  67.    Finally, run the sorted list through `uniq', to weed out duplicates:
  68.      $ who | cut -c1-8 | sort | uniq
  69.      arnold
  70.      bill
  71.      miriam
  72.    The `sort' command actually has a `-u' option that does what `uniq'
  73. does. However, `uniq' has other uses for which one cannot substitute
  74. `sort -u'.
  75.    The SysOp puts this pipeline into a shell script, and makes it
  76. available for all the users on the system:
  77.      # cat > /usr/local/bin/listusers
  78.      who | cut -c1-8 | sort | uniq
  79.      ^D
  80.      # chmod +x /usr/local/bin/listusers
  81.    There are four major points to note here.  First, with just four
  82. programs, on one command line, the SysOp was able to save about two
  83. hours worth of work.  Furthermore, the shell pipeline is just about as
  84. efficient as the C program would be, and it is much more efficient in
  85. terms of programmer time.  People time is much more expensive than
  86. computer time, and in our modern "there's never enough time to do
  87. everything" society, saving two hours of programmer time is no mean
  88. feat.
  89.    Second, it is also important to emphasize that with the
  90. *combination* of the tools, it is possible to do a special purpose job
  91. never imagined by the authors of the individual programs.
  92.    Third, it is also valuable to build up your pipeline in stages, as
  93. we did here.  This allows you to view the data at each stage in the
  94. pipeline, which helps you acquire the confidence that you are indeed
  95. using these tools correctly.
  96.    Finally, by bundling the pipeline in a shell script, other users can
  97. use your command, without having to remember the fancy plumbing you set
  98. up for them. In terms of how you run them, shell scripts and compiled
  99. programs are indistinguishable.
  100.    After the previous warm-up exercise, we'll look at two additional,
  101. more complicated pipelines.  For them, we need to introduce two more
  102. tools.
  103.    The first is the `tr' command, which stands for "transliterate." The
  104. `tr' command works on a character-by-character basis, changing
  105. characters. Normally it is used for things like mapping upper case to
  106. lower case:
  107.      $ echo ThIs ExAmPlE HaS MIXED case! | tr '[A-Z]' '[a-z]'
  108.      this example has mixed case!
  109.    There are several options of interest:
  110.      work on the complement of the listed characters, i.e., operations
  111.      apply to characters not in the given set
  112.      delete characters in the first set from the output
  113.      squeeze repeated characters in the output into just one character.
  114.    We will be using all three options in a moment.
  115.    The other command we'll look at is `comm'.  The `comm' command takes
  116. two sorted input files as input data, and prints out the files' lines
  117. in three columns.  The output columns are the data lines unique to the
  118. first file, the data lines unique to the second file, and the data
  119. lines that are common to both.  The `-1', `-2', and `-3' command line
  120. options omit the respective columns. (This is non-intuitive and takes a
  121. little getting used to.)  For example:
  122.      $ cat f1
  123.      11111
  124.      22222
  125.      33333
  126.      44444
  127.      $ cat f2
  128.      00000
  129.      22222
  130.      33333
  131.      55555
  132.      $ comm f1 f2
  133.              00000
  134.      11111
  135.                      22222
  136.                      33333
  137.      44444
  138.              55555
  139.    The single dash as a filename tells `comm' to read standard input
  140. instead of a regular file.
  141.    Now we're ready to build a fancy pipeline.  The first application is
  142. a word frequency counter.  This helps an author determine if he or she
  143. is over-using certain words.
  144.    The first step is to change the case of all the letters in our input
  145. file to one case.  "The" and "the" are the same word when doing
  146. counting.
  147.      $ tr '[A-Z]' '[a-z]' < whats.gnu | ...
  148.    The next step is to get rid of punctuation.  Quoted words and
  149. unquoted words should be treated identically; it's easiest to just get
  150. the punctuation out of the way.
  151.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...
  152.    The second `tr' command operates on the complement of the listed
  153. characters, which are all the letters, the digits, the underscore, and
  154. the blank.  The `\012' represents the newline character; it has to be
  155. left alone.  (The ASCII TAB character should also be included for good
  156. measure in a production script.)
  157.    At this point, we have data consisting of words separated by blank
  158. space.  The words only contain alphanumeric characters (and the
  159. underscore).  The next step is break the data apart so that we have one
  160. word per line. This makes the counting operation much easier, as we
  161. will see shortly.
  162.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
  163.      > tr -s '[ ]' '\012' | ...
  164.    This command turns blanks into newlines.  The `-s' option squeezes
  165. multiple newline characters in the output into just one.  This helps us
  166. avoid blank lines. (The `>' is the shell's "secondary prompt." This is
  167. what the shell prints when it notices you haven't finished typing in
  168. all of a command.)
  169.    We now have data consisting of one word per line, no punctuation,
  170. all one case.  We're ready to count each word:
  171.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
  172.      > tr -s '[ ]' '\012' | sort | uniq -c | ...
  173.    At this point, the data might look something like this:
  174.        60 a
  175.         2 able
  176.         6 about
  177.         1 above
  178.         2 accomplish
  179.         1 acquire
  180.         1 actually
  181.         2 additional
  182.    The output is sorted by word, not by count!  What we want is the most
  183. frequently used words first.  Fortunately, this is easy to accomplish,
  184. with the help of two more `sort' options:
  185.      do a numeric sort, not an ASCII one
  186.      reverse the order of the sort
  187.    The final pipeline looks like this:
  188.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
  189.      > tr -s '[ ]' '\012' | sort | uniq -c | sort -nr
  190.       156 the
  191.        60 a
  192.        58 to
  193.        51 of
  194.        51 and
  195.       ...
  196.    Whew!  That's a lot to digest.  Yet, the same principles apply. With
  197. six commands, on two lines (really one long one split for convenience),
  198. we've created a program that does something interesting and useful, in
  199. much less time than we could have written a C program to do the same
  200. thing.
  201.    A minor modification to the above pipeline can give us a simple
  202. spelling checker!  To determine if you've spelled a word correctly, all
  203. you have to do is look it up in a dictionary.  If it is not there, then
  204. chances are that your spelling is incorrect.  So, we need a dictionary.
  205. If you have the Slackware Linux distribution, you have the file
  206. `/usr/lib/ispell/ispell.words', which is a sorted, 38,400 word
  207. dictionary.
  208.    Now, how to compare our file with the dictionary?  As before, we
  209. generate a sorted list of words, one per line:
  210.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
  211.      > tr -s '[ ]' '\012' | sort -u | ...
  212.    Now, all we need is a list of words that are *not* in the
  213. dictionary.  Here is where the `comm' command comes in.
  214.      $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
  215.      > tr -s '[ ]' '\012' | sort -u |
  216.      > comm -23 - /usr/lib/ispell/ispell.words
  217.    The `-2' and `-3' options eliminate lines that are only in the
  218. dictionary (the second file), and lines that are in both files.  Lines
  219. only in the first file (standard input, our stream of words), are words
  220. that are not in the dictionary.  These are likely candidates for
  221. spelling errors.  This pipeline was the first cut at a production
  222. spelling checker on Unix.
  223.    There are some other tools that deserve brief mention.
  224. `grep'
  225.      search files for text that matches a regular expression
  226. `egrep'
  227.      like `grep', but with more powerful regular expressions
  228.      count lines, words, characters
  229. `tee'
  230.      a T-fitting for data pipes, copies data to files and to standard
  231.      output
  232. `sed'
  233.      the stream editor, an advanced tool
  234. `awk'
  235.      a data manipulation language, another advanced tool
  236.    The software tools philosophy also espoused the following bit of
  237. advice: "Let someone else do the hard part." This means, take something
  238. that gives you most of what you need, and then massage it the rest of
  239. the way until it's in the form that you want.
  240.    To summarize:
  241.   1. Each program should do one thing well. No more, no less.
  242.   2. Combining programs with appropriate plumbing leads to results where
  243.      the whole is greater than the sum of the parts.  It also leads to
  244.      novel uses of programs that the authors might never have imagined.
  245.   3. Programs should never print extraneous header or trailer data,
  246.      since these could get sent on down a pipeline. (A point we didn't
  247.      mention earlier.)
  248.   4. Let someone else do the hard part.
  249.   5. Know your toolbox! Use each program appropriately. If you don't
  250.      have an appropriate tool, build one.
  251.    As of this writing, all the programs we've discussed are available
  252. via anonymous `ftp' from `prep.ai.mit.edu' as
  253. `/pub/gnu/textutils-1.9.tar.gz' directory.(1)
  254.    None of what I have presented in this column is new. The Software
  255. Tools philosophy was first introduced in the book `Software Tools', by
  256. Brian Kernighan and P.J. Plauger (Addison-Wesley, ISBN 0-201-03669-X).
  257. This book showed how to write and use software tools.   It was written
  258. in 1976, using a preprocessor for FORTRAN named `ratfor' (RATional
  259. FORtran).  At the time, C was not as ubiquitous as it is now; FORTRAN
  260. was.  The last chapter presented a `ratfor' to FORTRAN processor,
  261. written in `ratfor'. `ratfor' looks an awful lot like C; if you know C,
  262. you won't have any problem following the code.
  263.    In 1981, the book was updated and made available as `Software Tools
  264. in Pascal' (Addison-Wesley, ISBN 0-201-10342-7).  Both books remain in
  265. print, and are well worth reading if you're a programmer.  They
  266. certainly made a major change in how I view programming.
  267.    Initially, the programs in both books were available (on 9-track
  268. tape) from Addison-Wesley.  Unfortunately, this is no longer the case,
  269. although you might be able to find copies floating around the Internet.
  270. For a number of years, there was an active Software Tools Users Group,
  271. whose members had ported the original `ratfor' programs to essentially
  272. every computer system with a FORTRAN compiler.  The popularity of the
  273. group waned in the middle '80s as Unix began to spread beyond
  274. universities.
  275.    With the current proliferation of GNU code and other clones of Unix
  276. programs, these programs now receive little attention; modern C
  277. versions are much more efficient and do more than these programs do.
  278. Nevertheless, as exposition of good programming style, and evangelism
  279. for a still-valuable philosophy, these books are unparalleled, and I
  280. recommend them highly.
  281.    Acknowledgment: I would like to express my gratitude to Brian
  282. Kernighan of Bell Labs, the original Software Toolsmith, for reviewing
  283. this column.
  284.    ---------- Footnotes ----------
  285.    (1)  Version 1.9 was current when this column was written. Check the
  286. nearest GNU archive for the current version.
  287. File: textutils.info,  Node: Index,  Prev: Opening the software toolbox,  Up: Top
  288. Index
  289. *****
  290. * Menu:
  291. * +COUNT:                               tail invocation.
  292. * +N:                                   uniq invocation.
  293. * -address-radix:                       od invocation.
  294. * -all:                                 unexpand invocation.
  295. * -before:                              tac invocation.
  296. * -binary:                              md5sum invocation.
  297. * -body-numbering:                      nl invocation.
  298. * -bytes <1>:                           split invocation.
  299. * -bytes <2>:                           head invocation.
  300. * -bytes <3>:                           fold invocation.
  301. * -bytes <4>:                           tail invocation.
  302. * -bytes <5>:                           wc invocation.
  303. * -bytes:                               cut invocation.
  304. * -characters:                          cut invocation.
  305. * -chars:                               wc invocation.
  306. * -check-chars:                         uniq invocation.
  307. * -count:                               uniq invocation.
  308. * -crown-margin:                        fmt invocation.
  309. * -delimiter:                           cut invocation.
  310. * -delimiters:                          paste invocation.
  311. * -digits:                              csplit invocation.
  312. * -elide-empty-files:                   csplit invocation.
  313. * -fields:                              cut invocation.
  314. * -follow:                              tail invocation.
  315. * -footer-numbering:                    nl invocation.
  316. * -format:                              od invocation.
  317. * -header-numbering:                    nl invocation.
  318. * -help:                                Common options.
  319. * -ignore-case <1>:                     uniq invocation.
  320. * -ignore-case:                         join invocation.
  321. * -initial:                             expand invocation.
  322. * -join-blank-lines:                    nl invocation.
  323. * -keep-files:                          csplit invocation.
  324. * -line-bytes:                          split invocation.
  325. * -lines <1>:                           split invocation.
  326. * -lines <2>:                           head invocation.
  327. * -lines <3>:                           tail invocation.
  328. * -lines:                               wc invocation.
  329. * -no-renumber:                         nl invocation.
  330. * -number:                              cat invocation.
  331. * -number-format:                       nl invocation.
  332. * -number-nonblank:                     cat invocation.
  333. * -number-separator:                    nl invocation.
  334. * -number-width:                        nl invocation.
  335. * -only-delimited:                      cut invocation.
  336. * -output-duplicates:                   od invocation.
  337. * -page-increment:                      nl invocation.
  338. * -prefix:                              csplit invocation.
  339. * -quiet <1>:                           tail invocation.
  340. * -quiet <2>:                           head invocation.
  341. * -quiet:                               csplit invocation.
  342. * -read-bytes:                          od invocation.
  343. * -regex:                               tac invocation.
  344. * -repeated:                            uniq invocation.
  345. * -section-delimiter:                   nl invocation.
  346. * -separator:                           tac invocation.
  347. * -serial:                              paste invocation.
  348. * -show-all:                            cat invocation.
  349. * -show-ends:                           cat invocation.
  350. * -show-nonprinting:                    cat invocation.
  351. * -show-tabs:                           cat invocation.
  352. * -silent <1>:                          tail invocation.
  353. * -silent <2>:                          head invocation.
  354. * -silent:                              csplit invocation.
  355. * -skip-bytes:                          od invocation.
  356. * -skip-chars:                          uniq invocation.
  357. * -skip-fields:                         uniq invocation.
  358. * -spaces:                              fold invocation.
  359. * -split-only:                          fmt invocation.
  360. * -squeeze-blank:                       cat invocation.
  361. * -starting-line-number:                nl invocation.
  362. * -status:                              md5sum invocation.
  363. * -string:                              md5sum invocation.
  364. * -strings:                             od invocation.
  365. * -suffix:                              csplit invocation.
  366. * -sysv:                                sum invocation.
  367. * -tabs <1>:                            unexpand invocation.
  368. * -tabs:                                expand invocation.
  369. * -tagged-paragraph:                    fmt invocation.
  370. * -text:                                md5sum invocation.
  371. * -traditional:                         od invocation.
  372. * -uniform-spacing:                     fmt invocation.
  373. * -unique:                              uniq invocation.
  374. * -verbose <1>:                         tail invocation.
  375. * -verbose <2>:                         head invocation.
  376. * -verbose:                             split invocation.
  377. * -version:                             Common options.
  378. * -warn:                                md5sum invocation.
  379. * -width <1>:                           od invocation.
  380. * -width <2>:                           fmt invocation.
  381. * -width:                               fold invocation.
  382. * -words:                               wc invocation.
  383. * -1 <1>:                               join invocation.
  384. * -1:                                   comm invocation.
  385. * -2 <1>:                               comm invocation.
  386. * -2:                                   join invocation.
  387. * -3:                                   comm invocation.
  388. * -COLUMN:                              pr invocation.
  389. * -COUNT <1>:                           head invocation.
  390. * -COUNT:                               tail invocation.
  391. * -N:                                   uniq invocation.
  392. * -TAB <1>:                             unexpand invocation.
  393. * -TAB:                                 expand invocation.
  394. * -WIDTH:                               fmt invocation.
  395. * -a <1>:                               unexpand invocation.
  396. * -a:                                   join invocation.
  397. * -A <1>:                               cat invocation.
  398. * -A:                                   od invocation.
  399. * -a <1>:                               pr invocation.
  400. * -a:                                   od invocation.
  401. * -b <1>:                               csplit invocation.
  402. * -b <2>:                               split invocation.
  403. * -b <3>:                               cat invocation.
  404. * -b <4>:                               fold invocation.
  405. * -b <5>:                               cut invocation.
  406. * -b <6>:                               pr invocation.
  407. * -b <7>:                               nl invocation.
  408. * -b <8>:                               md5sum invocation.
  409. * -b <9>:                               tac invocation.
  410. * -b <10>:                              sort invocation.
  411. * -b:                                   od invocation.
  412. * -c <1>:                               fmt invocation.
  413. * -c <2>:                               cut invocation.
  414. * -c <3>:                               od invocation.
  415. * -c <4>:                               pr invocation.
  416. * -c <5>:                               wc invocation.
  417. * -c <6>:                               tail invocation.
  418. * -c:                                   sort invocation.
  419. * -C:                                   split invocation.
  420. * -c <1>:                               head invocation.
  421. * -c:                                   uniq invocation.
  422. * -d <1>:                               nl invocation.
  423. * -d <2>:                               sort invocation.
  424. * -d <3>:                               uniq invocation.
  425. * -d <4>:                               cut invocation.
  426. * -d <5>:                               pr invocation.
  427. * -d <6>:                               paste invocation.
  428. * -d:                                   od invocation.
  429. * -e <1>:                               join invocation.
  430. * -e <2>:                               cat invocation.
  431. * -e:                                   pr invocation.
  432. * -E:                                   cat invocation.
  433. * -f <1>:                               cut invocation.
  434. * -f <2>:                               csplit invocation.
  435. * -f <3>:                               pr invocation.
  436. * -f:                                   uniq invocation.
  437. * -F:                                   pr invocation.
  438. * -f <1>:                               nl invocation.
  439. * -f <2>:                               tail invocation.
  440. * -f <3>:                               sort invocation.
  441. * -f:                                   od invocation.
  442. * -g:                                   sort invocation.
  443. * -h <1>:                               od invocation.
  444. * -h <2>:                               nl invocation.
  445. * -h:                                   pr invocation.
  446. * -i <1>:                               od invocation.
  447. * -i <2>:                               nl invocation.
  448. * -i <3>:                               sort invocation.
  449. * -i <4>:                               pr invocation.
  450. * -i <5>:                               join invocation.
  451. * -i <6>:                               expand invocation.
  452. * -i:                                   uniq invocation.
  453. * -j:                                   od invocation.
  454. * -j1:                                  join invocation.
  455. * -j2:                                  join invocation.
  456. * -k <1>:                               csplit invocation.
  457. * -k:                                   sort invocation.
  458. * -l <1>:                               od invocation.
  459. * -l <2>:                               split invocation.
  460. * -l <3>:                               nl invocation.
  461. * -l <4>:                               pr invocation.
  462. * -l:                                   wc invocation.
  463. * -m <1>:                               sort invocation.
  464. * -m:                                   pr invocation.
  465. * -n <1>:                               sort invocation.
  466. * -n <2>:                               pr invocation.
  467. * -n <3>:                               tail invocation.
  468. * -n <4>:                               head invocation.
  469. * -n:                                   nl invocation.
  470. * -N:                                   od invocation.
  471. * -n <1>:                               csplit invocation.
  472. * -n <2>:                               cat invocation.
  473. * -n:                                   cut invocation.
  474. * -o <1>:                               pr invocation.
  475. * -o <2>:                               sort invocation.
  476. * -o:                                   od invocation.
  477. * -p:                                   nl invocation.
  478. * -q <1>:                               head invocation.
  479. * -q <2>:                               tail invocation.
  480. * -q:                                   csplit invocation.
  481. * -r <1>:                               sort invocation.
  482. * -r <2>:                               tac invocation.
  483. * -r <3>:                               sum invocation.
  484. * -r:                                   pr invocation.
  485. * -s <1>:                               cut invocation.
  486. * -s <2>:                               uniq invocation.
  487. * -s <3>:                               paste invocation.
  488. * -s <4>:                               cat invocation.
  489. * -s <5>:                               csplit invocation.
  490. * -s <6>:                               od invocation.
  491. * -s <7>:                               pr invocation.
  492. * -s <8>:                               fmt invocation.
  493. * -s <9>:                               fold invocation.
  494. * -s <10>:                              sum invocation.
  495. * -s <11>:                              tac invocation.
  496. * -s:                                   nl invocation.
  497. * -T:                                   cat invocation.
  498. * -t <1>:                               pr invocation.
  499. * -t <2>:                               cat invocation.
  500. * -t <3>:                               sort invocation.
  501. * -t <4>:                               md5sum invocation.
  502. * -t <5>:                               expand invocation.
  503. * -t <6>:                               fmt invocation.
  504. * -t <7>:                               od invocation.
  505. * -t:                                   unexpand invocation.
  506. * -u <1>:                               cat invocation.
  507. * -u <2>:                               fmt invocation.
  508. * -u <3>:                               sort invocation.
  509. * -u:                                   uniq invocation.
  510. * -v <1>:                               od invocation.
  511. * -v <2>:                               head invocation.
  512. * -v <3>:                               tail invocation.
  513. * -v <4>:                               cat invocation.
  514. * -v <5>:                               pr invocation.
  515. * -v:                                   nl invocation.
  516. * -w <1>:                               uniq invocation.
  517. * -w <2>:                               wc invocation.
  518. * -w <3>:                               md5sum invocation.
  519. * -w <4>:                               pr invocation.
  520. * -w <5>:                               od invocation.
  521. * -w <6>:                               nl invocation.
  522. * -w <7>:                               fold invocation.
  523. * -w:                                   fmt invocation.
  524. * -x:                                   od invocation.
  525. * -z <1>:                               sort invocation.
  526. * -z:                                   csplit invocation.
  527. * 128-bit checksum:                     md5sum invocation.
  528. * 16-bit checksum:                      sum invocation.
  529. * across columns:                       pr invocation.
  530. * alnum:                                Character sets.
  531. * alpha:                                Character sets.
  532. * ASCII dump of files:                  od invocation.
  533. * backslash escapes:                    Character sets.
  534. * balancing columns:                    pr invocation.
  535. * binary input files:                   md5sum invocation.
  536. * blank:                                Character sets.
  537. * blank lines, numbering:               nl invocation.
  538. * blanks, ignoring leading:             sort invocation.
  539. * body, numbering:                      nl invocation.
  540. * BSD sum:                              sum invocation.
  541. * BSD tail:                             tail invocation.
  542. * bugs, reporting:                      Introduction.
  543. * byte count:                           wc invocation.
  544. * case folding:                         sort invocation.
  545. * cat:                                  cat invocation.
  546. * characters classes:                   Character sets.
  547. * checking for sortedness:              sort invocation.
  548. * checksum, 128-bit:                    md5sum invocation.
  549. * checksum, 16-bit:                     sum invocation.
  550. * cksum:                                cksum invocation.
  551. * cntrl:                                Character sets.
  552. * comm:                                 comm invocation.
  553. * common field, joining on:             join invocation.
  554. * common lines:                         comm invocation.
  555. * common options:                       Common options.
  556. * comparing sorted files:               comm invocation.
  557. * concatenate and write files:          cat invocation.
  558. * context splitting:                    csplit invocation.
  559. * converting tabs to spaces:            expand invocation.
  560. * copying files:                        cat invocation.
  561. * CRC checksum:                         cksum invocation.
  562. * crown margin:                         fmt invocation.
  563. * csplit:                               csplit invocation.
  564. * cut:                                  cut invocation.
  565. * cyclic redundancy check:              cksum invocation.
  566. * deleting characters:                  Squeezing.
  567. * differing lines:                      comm invocation.
  568. * digit:                                Character sets.
  569. * double spacing:                       pr invocation.
  570. * duplicate lines, outputting:          uniq invocation.
  571. * empty lines, numbering:               nl invocation.
  572. * entire files, output of:              Output of entire files.
  573. * equivalence classes:                  Character sets.
  574. * expand:                               expand invocation.
  575. * field separator character:            sort invocation.
  576. * file contents, dumping unambiguously: od invocation.
  577. * file offset radix:                    od invocation.
  578. * fingerprint, 128-bit:                 md5sum invocation.
  579. * first part of files, outputting:      head invocation.
  580. * fmt:                                  fmt invocation.
  581. * fold:                                 fold invocation.
  582. * folding long input lines:             fold invocation.
  583. * footers, numbering:                   nl invocation.
  584. * formatting file contents:             Formatting file contents.
  585. * general numeric sort:                 sort invocation.
  586. * graph:                                Character sets.
  587. * growing files:                        tail invocation.
  588. * head:                                 head invocation.
  589. * headers, numbering:                   nl invocation.
  590. * help, online:                         Common options.
  591. * hex dump of files:                    od invocation.
  592. * indenting lines:                      pr invocation.
  593. * initial part of files, outputting:    head invocation.
  594. * initial tabs, converting:             expand invocation.
  595. * input tabs:                           pr invocation.
  596. * introduction:                         Introduction.
  597. * join:                                 join invocation.
  598. * Knuth, Donald E.:                     fmt invocation.
  599. * last part of files, outputting:       tail invocation.
  600. * left margin:                          pr invocation.
  601. * line count:                           wc invocation.
  602. * line numbering:                       nl invocation.
  603. * line-breaking:                        fmt invocation.
  604. * line-by-line comparison:              comm invocation.
  605. * ln format for nl:                     nl invocation.
  606. * logical pages, numbering on:          nl invocation.
  607. * lower:                                Character sets.
  608. * md5sum:                               md5sum invocation.
  609. * merging files:                        paste invocation.
  610. * merging sorted files:                 sort invocation.
  611. * message-digest, 128-bit:              md5sum invocation.
  612. * months, sorting by:                   sort invocation.
  613. * multicolumn output, generating:       pr invocation.
  614. * nl:                                   nl invocation.
  615. * numbering lines:                      nl invocation.
  616. * numeric sort:                         sort invocation.
  617. * octal dump of files:                  od invocation.
  618. * od:                                   od invocation.
  619. * operating on characters:              Operating on characters.
  620. * operating on sorted files:            Operating on sorted files.
  621. * output file name prefix <1>:          split invocation.
  622. * output file name prefix:              csplit invocation.
  623. * output file name suffix:              csplit invocation.
  624. * output of entire files:               Output of entire files.
  625. * output of parts of files:             Output of parts of files.
  626. * output tabs:                          pr invocation.
  627. * overwriting of input, allowed:        sort invocation.
  628. * paragraphs, reformatting:             fmt invocation.
  629. * parts of files, output of:            Output of parts of files.
  630. * paste:                                paste invocation.
  631. * phone directory order:                sort invocation.
  632. * pieces, splitting a file into:        split invocation.
  633. * Plass, Michael F.:                    fmt invocation.
  634. * POSIX.2:                              Introduction.
  635. * POSIXLY_CORRECT:                      Warnings in tr.
  636. * pr:                                   pr invocation.
  637. * print:                                Character sets.
  638. * printing, preparing files for:        pr invocation.
  639. * punct:                                Character sets.
  640. * radix for file offsets:               od invocation.
  641. * ranges:                               Character sets.
  642. * reformatting paragraph text:          fmt invocation.
  643. * repeated characters:                  Character sets.
  644. * reverse sorting:                      sort invocation.
  645. * reversing files:                      tac invocation.
  646. * rn format for nl:                     nl invocation.
  647. * rz format for nl:                     nl invocation.
  648. * screen columns:                       fold invocation.
  649. * section delimiters of pages:          nl invocation.
  650. * sentences and line-breaking:          fmt invocation.
  651. * sort:                                 sort invocation.
  652. * sort field:                           sort invocation.
  653. * sort zero-terminated lines:           sort invocation.
  654. * sorted files, operations on:          Operating on sorted files.
  655. * sorting files:                        sort invocation.
  656. * space:                                Character sets.
  657. * specifying sets of characters:        Character sets.
  658. * split:                                split invocation.
  659. * splitting a file into pieces:         split invocation.
  660. * splitting a file into pieces by context: csplit invocation.
  661. * squeezing blank lines:                cat invocation.
  662. * squeezing repeat characters:          Squeezing.
  663. * string constants, outputting:         od invocation.
  664. * sum:                                  sum invocation.
  665. * summarizing files:                    Summarizing files.
  666. * System V sum:                         sum invocation.
  667. * tabs to spaces, converting:           expand invocation.
  668. * tabstops, setting:                    expand invocation.
  669. * tac:                                  tac invocation.
  670. * tagged paragraphs:                    fmt invocation.
  671. * tail:                                 tail invocation.
  672. * telephone directory order:            sort invocation.
  673. * text input files:                     md5sum invocation.
  674. * text utilities:                       Top.
  675. * text, reformatting:                   fmt invocation.
  676. * TMPDIR:                               sort invocation.
  677. * total counts:                         wc invocation.
  678. * tr:                                   tr invocation.
  679. * translating characters:               Translating.
  680. * type size:                            od invocation.
  681. * unexpand:                             unexpand invocation.
  682. * uniq:                                 uniq invocation.
  683. * uniqify files:                        uniq invocation.
  684. * uniqifying output:                    sort invocation.
  685. * unique lines, outputting:             uniq invocation.
  686. * unprintable characters, ignoring:     sort invocation.
  687. * upper:                                Character sets.
  688. * utilities for text handling:          Top.
  689. * verifying MD5 checksums:              md5sum invocation.
  690. * version number, finding:              Common options.
  691. * wc:                                   wc invocation.
  692. * word count:                           wc invocation.
  693. * wrapping long input lines:            fold invocation.
  694. * xdigit:                               Character sets.
  695.