El comando Unix pg

Una de las características más elegantes del sistema operativo Unix, es que cuando ejecuta un comando o utilidad, no supone que la salida y entrada estándar son la pantalla y el teclado. En realidad los programas y utilidades no saben de dónde viene y hacia dónde se dirigen los datos. Por esta razón los comandos pueden resultar poco amables con el usuario (considere por ejemplo el editor ed). Pero como ventaja, esto permite que la salida estándar de un comando pueda ser redireccionada y usada como la entrada estándar de otro comando, creando una especie de “tubería” o vía de comunicación entre ellas. Para crear esta conexión o tubería (los creadores del término son los estadounidenses, que usan la palabra pipeline) se usa el metacaracter barra vertical (|). Uno de los comandos más propiamente usados como conexión por tubería con otras utilidades es el comando pg. pg indica paginación. Cuando se lista el contenido de un directorio con el comando ls, o cuando se ve el contenido de un archivo cualquiera, por ejemplo con el comando cat, puede ocurrir que, si los datos ocupan más de lo que puede presentar nuestra pantalla, la velocidad a la que se despliegan no permita leerlos. El comando pg hace que los datos se presenten por páginas. Para avanzar sólo es necesario teclear enter. Al final del archivo se muestra el mensaje (EOF) y se hace una pausa.
Supongamos que tenemos un archivo llamado Octal.c
La instrucción

cat Octal.c

hace que en mi pantalla se presente lo siguiente:

 potencia *= 8;
 break;
 case '4':
 decimal += 4*potencia;
 potencia *= 8;
 break;
 case '5':
 decimal += 5*potencia;
 potencia *= 8;
 break;
 case '6':
 decimal += 6*potencia;
 potencia *= 8;
 break;
 case '7':
 decimal += 7*potencia;
 potencia *= 8;
 break;
 default:
 if ( '\n' != b[i])
 {  // Abre if
 printf("\nERROR. LA CADENA NO ES VALIDA!\n");
 valido = 0;  // El octal recibido no
              // es valido
 printf("\nEste caracter no es valido: ");
 putchar(b[i]);
 printf("\n");
 } // Cierra if
 break;

 }   // Cierra switch
 }  // Cierra for  

 if ( 1 == valido )
 printf("\nEl valor decimal es: %d\n", decimal);
 else
 printf("\nEl numero introducido no es valido.\n");
 }  // Cierra Imprime

Lo cual es la última parte del archivo. En cambio con el uso de la instrucción

 cat Octal.c | pg

se obtiene:

 /*Este programa convierte de octal
  a decimal */

 #include <stdio.h>
 #define Tamano 35
 // La variable Tamano se fija en 35
 // porque los enteros de cuatro bytes
 // ocupan 32 bits y la ultima entrada
 // de una cadena en un arreglo es \n

 /*Prototipo de funcion Recibe*/
 /* Esta funcion recibe la cadena
    pero no verifica que sea valida */
 void Recibe( int a[]);

 /*Prototipo de funcion Imprime*/
 /* Si la cadena es valida se calcula
 e imprime su equivalente decimal, si no
 se manda un mensaje al usuario y se termina
 el programa */

 void Imprime( int b[]);

 /*///////////////////////////////
 // MAIN
 ////////////////////////////////*/  

 int main()

 {       // Abre main
 int arreglo[Tamano];
 // En este arreglo se recibiran los valores
 // de la cadena octal
 int evaluar;
 // La variable evaluar lleva el control
 // de la legalidad de la cadena, es decir
 // se introducen digitos validos como 2, 1
 // o se introducen valores invalidos como
 // 9, e, h, etcetera

 // Un  mensaje que avisa al usuario que
 // hace el programa
 printf("\nEste programa recibe un numero "
         "octal y lo convierte a decimal.\n");

:

Lo cual es la primera parte del archivo. Los dos puntos del final indican que se debe teclear enter para ver la siguiente pantalla. Si sucesivamente tecleo enter, puedo ver todo el contenido del archivo.

EL COMANDO PG ACEPTA LAS SIGUIENTES OPCIONES:
– n (donde n debe sustituirse por cualquier número) indica el número de líneas a desplegar. La instrucción

 cat Octal.c | pg - 10

muestra el contenido del archivo Octal.c en pantallas de 10 líneas cada vez.
– c limipia (clear) la pantalla antes de presentar el contenido del archivo.

 cat Octal.c | pg -c

– e no hace pausa al final del archivo.
– p CADENA cambia el prompt por defecto (:) por la CADENA.
Así que con

 cat Octal.c | pg -10 -c -p ELISA

se limpia la pantalla, se muestra el contenido de Octal.c en pantallas de 10 líneas al final de las cuales aparece como promt la palabra ELISA:

 /*Este programa convierte de octal 
  a decimal */

 #include <stdio.h>
 #define Tamano 35
 // La variable Tamano se fija en 35
 // porque los enteros de cuatro bytes
 // ocupan 32 bits y la ultima entrada
 // de una cadena en un arreglo es \n
 
 ELISA

Se puede paginar el archivo con la opción
– p %d que numera las páginas.

 cat Octal.c | pg -10 -c -p %d

produce como salida

 /*Este programa convierte de octal 
  a decimal */

 #include <stdio.h>
 #define Tamano 35
 // La variable Tamano se fija en 35
 // porque los enteros de cuatro bytes
 // ocupan 32 bits y la ultima entrada
 // de una cadena en un arreglo es \n
 
 1

+ n (donde n es cualquier número de línea)
empieza el despliegue desde la línea n.
BUSCAR UNA CADENA CON EL COMANDO PG
+ /CADENA/
empieza el despliegue desde la primera aparición de CADENA.
Por ejemplo,

cat Octal.c | pg -10 -c -p %d +/main/

presenta en pantalla

 int main()

 {       // Abre main 
 int arreglo[Tamano];
 // En este arreglo se recibiran los valores
 // de la cadena octal 
 int evaluar; 
 // La variable evaluar lleva el control
 // de la legalidad de la cadena, es decir
 // se introducen digitos validos como 2, 1
4
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: