• Home
  • Store
  • Blog
  • Contact
  • Home
  • Store
  • Blog
  • Contact
  • #linux
  • |
  • #commandline
  • |
  • #softwareengineering
  • |
  • #embeddedsystems
  • |
  • #compilers
  • ...
  • View All >>

Intro To 'ptx' Command In Linux

2023-10-11 - By Robert Elder

     I use the 'ptx' command to produce the permuted index of a text document:

ptx story.txt
                                       Once upon a time.
                           Once upon   a time.
                         Once upon a   time.
                                Once   upon a time.

What Does The 'ptx' Command Do?

     A permuted index, also known as a 'key word in context', is part of an obsolete method of organizing keywords in a piece of documentation.

     The 'ptx' command first appeared in 1972 as a user maintained program, in the second edition of the Unix programmers manual:

     This manual states that "The index for this manual was generated using ptx.":

     Source: Unix Programmer's Manual, Second Edition 1972.

Example Use Case Of 'ptx' Command

     Here, I have a text document in the file 'instructions.txt' that contains some instructions:

Maximum operating efficiency of a cat is achieve by petting it in slow motion.

     This ptx command:

ptx instructions.txt

     will produce a permuted index of all words in the document as follows:

   cat is achieve by petting/          Maximum operating efficiency of a
     Maximum operating efficiency of   a cat is achieve by petting it in/
             /efficiency of a cat is   achieve by petting it in slow/
     /efficiency of a cat is achieve   by petting it in slow motion.
          /operating efficiency of a   cat is achieve by petting it in/
   petting it/     Maximum operating   efficiency of a cat is achieve by
      a cat is achieve by petting it   in slow motion.       /efficiency of
      /operating efficiency of a cat   is achieve by petting it in slow/
      of a cat is achieve by petting   it in slow motion.       /efficiency
       achieve by petting it in slow   motion.                 /of a cat is
        Maximum operating efficiency   of a cat is achieve by petting it/
   achieve by petting/       Maximum   operating efficiency of a cat is
             /of a cat is achieve by   petting it in slow motion.
     cat is achieve by petting it in   slow motion.                   /of a

     Notice these words are sorted in the above output:

   ... .. ....... .. ........          Maximum ......... .......... .. .
     ....... ......... .......... ..   a ... .. ....... .. ....... .. ...
             ........... .. . ... ..   achieve .. ....... .. .. .....
     ........... .. . ... .. .......   by ....... .. .. .... .......
          .......... .......... .. .   cat .. ....... .. ....... .. ...
   ....... ...     ....... .........   efficiency .. . ... .. ....... ..
      . ... .. ....... .. ....... ..   in .... .......       ........... ..
      .......... .......... .. . ...   is ....... .. ....... .. .. .....
      .. . ... .. ....... .. .......   it .. .... .......       ...........
       ....... .. ....... .. .. ....   motion.                 ... . ... ..
        ....... ......... ..........   of . ... .. ....... .. ....... ...
   ....... .. ........       .......   operating .......... .. . ... ..
             ... . ... .. ....... ..   petting .. .. .... .......
     ... .. ....... .. ....... .. ..   slow .......                   ... .

     I can specify an ignore file called 'ignore.txt' to ingore common English words:

a
by
in
is
it
of

     Now, if I re-run the 'ptx' command and specify the ignore file, the output will be less verbose and omit lines that center on the ignored keywords:

ptx --ignore-file=ignore.txt instructions.txt
   cat is achieve by petting/          Maximum operating efficiency of a
             /efficiency of a cat is   achieve by petting it in slow/
          /operating efficiency of a   cat is achieve by petting it in/
   petting it/     Maximum operating   efficiency of a cat is achieve by
       achieve by petting it in slow   motion.                 /of a cat is
   achieve by petting/       Maximum   operating efficiency of a cat is
             /of a cat is achieve by   petting it in slow motion.
     cat is achieve by petting it in   slow motion.                   /of a

Creating PDF Documentation Using 'ptx' Command Output

     I can use the '--format' flag to format the permuted index into a typesetting language like tex for further processing:

ptx --ignore-file=ignore.txt --format=tex instructions.txt

     And the output will look something like this:

\xx {cat is achieve by petting}{}{Maximum}{ operating efficiency of a}{}
\xx {}{efficiency of a cat is}{achieve}{ by petting it in slow}{}
\xx {}{operating efficiency of a}{cat}{ is achieve by petting it in}{}
\xx {petting it}{Maximum operating}{efficiency}{ of a cat is achieve by}{}
\xx {}{achieve by petting it in slow}{motion}{.}{of a cat is}
\xx {achieve by petting}{Maximum}{operating}{ efficiency of a cat is}{}
\xx {}{of a cat is achieve by}{petting}{ it in slow motion.}{}
\xx {}{cat is achieve by petting it in}{slow}{ motion.}{of a}

     I can take the above output and surround it with these latex directives to produce a finished .tex document:

cat << EOF >> indx.tex
\documentclass{article}
\usepackage{adjustbox}
\begin{document}
\newcommand{\xx}[5]{{#1} & {#2} & \textbf{{#3}} & {#4} & {#5} \\\\}
\noindent\sffamily
\begin{adjustbox}{center}
\begin{tabular}{lrllr}
 & & \textbf{The Key Word} & & \\\\
\hline
EOF
ptx --ignore-file=ignore.txt --format=tex instructions.txt >> indx.tex
cat << EOF >> indx.tex
\end{tabular}
\end{adjustbox}
\end{document}
EOF

     And the final '*.tex' document will look like this:

\documentclass{article}
\usepackage{adjustbox}
\begin{document}
\newcommand{\xx}[5]{{#1} & {#2} & \textbf{{#3}} & {#4} & {#5} \\}
\noindent\sffamily
\begin{adjustbox}{center}
\begin{tabular}{lrllr}
 & & \textbf{The Key Word} & & \\
\hline
\xx {cat is achieve by petting}{}{Maximum}{ operating efficiency of a}{}
\xx {}{efficiency of a cat is}{achieve}{ by petting it in slow}{}
\xx {}{operating efficiency of a}{cat}{ is achieve by petting it in}{}
\xx {petting it}{Maximum operating}{efficiency}{ of a cat is achieve by}{}
\xx {}{achieve by petting it in slow}{motion}{.}{of a cat is}
\xx {achieve by petting}{Maximum}{operating}{ efficiency of a cat is}{}
\xx {}{of a cat is achieve by}{petting}{ it in slow motion.}{}
\xx {}{cat is achieve by petting it in}{slow}{ motion.}{of a}
\end{tabular}
\end{adjustbox}
\end{document}

     This '*.tex' document can be compiled into a '*.dvi' file using this command:

latex indx.tex

     The resulting '*.dvi' file can be compiled into a '*.ps' file using this command:

dvips indx.dvi

     And finally, the resulting '*.ps' file can be compiled into a PDF document using this command:

ps2pdf indx.ps

     You can view the final completed permutation index pdf document here.

     And that's why the 'ptx' command is my favourite Linux command.

Intro To 'stty' Command In Linux
Published 2023-10-04
$1.00 CAD
Terminal Block Mining Simulation Game
Intro To 'nproc' Command In Linux
Published 2023-07-15
Intro To 'comm' Command In Linux
Published 2023-09-06
How To Force The 'true' Command To Return 'false'
Published 2023-07-09
A Surprisingly Common Mistake Involving Wildcards & The Find Command
Published 2020-01-21
A Guide to Recording 660FPS Video On A $6 Raspberry Pi Camera
Published 2019-08-01
Intro To 'chroot' Command In Linux
Published 2023-06-23
Join My Mailing List

Privacy Policy
Why Bother Subscribing?
  • Free Software/Engineering Content. I publish all of my educational content publicly for free so everybody can make use of it.  Why bother signing up for a paid 'course', when you can just sign up for this email list?
  • Read about cool new products that I'm building. How do I make money? Glad you asked!  You'll get some emails with examples of things that I sell.  You might even get some business ideas of your own :)
  • People actually like this email list. I know that sounds crazy, because who actually subscribes to email lists these days, right?  Well, some do, and if you end up not liking it, I give you permission to unsubscribe and mark it as spam.
© 2025 Robert Elder Software Inc.
Privacy Policy      Store Policies      Terms of Use