1.7.- Comandos de formato de ficheros.

Los siguientes tres comandos (fmt, nl y pr) dan formato al texto de un fichero. El primero está pensado para volver a dar formato a los ficheros de texto, como en el caso de los ficheros LÉEME de documentación cuyas líneas son demasiado largas para que pueda visualizarlas. El comando nl numera las líneas de un fichero, lo cual puede servir para hacer referencias a líneas de la documentación o la correspondencia.

Por último, pr es una herramienta de procesamiento de impresión, que da a los documentos un formato de página adecuado para tal fin.

VOLVER A DAR FORMATO A PÁRRAFOS CON FMT

Hay veces que los ficheros vienen con unas líneas exageradamente largas, longitudes de líneas irregulares y otros problemas. Dependiendo del problema, podemos usar un editor de texto o un visor adecuado para leer el fichero. Con fmt podemos limpiar el fichero, si lo ejecutamos sin opciones (aparte del nombre del fichero de entrada, si no lo ha estado utilizando en la entrada estándar), el programa intentará  limpiar los párrafos, que supone delimitados por dos o más líneas en blanco o por cambio de sangría. El formato por defecto del nuevo párrafo tiene no menos de 75 caracteres de ancho. Podemos cambiar esto con las opciones -ancho, w ancho, o --width=ancho, que determinan que las líneas tendrán el ancho en caracteres especificado.

NUMERAR LÍNEAS CON NL

Con este comando podemos numerar las líneas de un fichero. Aunque las opciones de numeración de líneas de cat son limitadas, por lo que si necesita realizar numeraciones complejas, la herramienta a emplear es nl. En su caso más sencillo,  puede emplear nl aisladamente para obtener casi el mismo resultado que con cat -b: numerar todas las líneas de un fichero que no estén vacías. Puede añadir muchas opciones a nl para conseguir determinados efectos en especial:

  • Estilo de numeración del cuerpo.- Puede definir el estilo de numeración para el grueso de las líneas con las opciones -b estilo o --body-numering=estilo, donde estilo es el código del formato del estilo.
  • Estilo de numeración de encabezado y pie.- Si el texto tiene formato para impresión y tiene encabezados o pies, puede definir el estilo de estos elementos con las opciones -h estilo o --header-numbering=estilo para encabezados y -f estilo o --footer-numbering=estilo para el pie.
  • Separador de páginas.- Algunos esquemas de numeración reinicializan los números de líneas para cada página. Puede indicarle a nl cómo identificar una nueva página con las opciones -d código o --section-delimiter=código, donde código es el código del carácter que identifica la nueva página.
  • Opciones de número de línea para las nuevas páginas.- Normalmente, nl comienza a numerar cada página por la línea 1. Pero si le pasa las opciones -p o --no-renumber, no reinicializara el número de línea al llegar a nueva página.
  • Formato de los números.- Puede especificar el formato de la numeración con las opciones -n formato o --numberformat=formato, donde formato es:
    • ln -> Justificado a la izquierda, sin ceros iniciales.
    • rn -> Justificado a la derecha, sin ceros iniciales.
    • rz -> Justificado a la derecha, con ceros iniciales.

Las opciones body, header y footer le permiten especificar un estilo de numeración para cada uno de estos elementos de página:

  • Numerar solo las líneas que no estén vacías.- El comportamiento por defecto es numerar las líneas que no están vacías. Esto se corresponde con el valor t de style.
  • Numerar todas las líneas.- Si desea que se numeren las líneas vacías, especifique el valor a para style.
  • No numerar las líneas.- Para omitir los números de líneas (por ejemplo para los encabezados o pies), especifique el valor n para style.
  • Numerar las líneas que coincidan con una expresión regular.- Un valor REGEXP para style numera aquellas líneas que coincidan con la expresión regular REGEXP (las expresiones regulares las describiremos más adelante).

Como ejemplo, supongamos que escribe un script, fichero, pero descubrimos un error y que no funciona como esperábamos. Cuando lo ejecuta, obtiene mensajes de error que hacen referencia a números de línea, por lo que decidimos crear una versión del script con las líneas numeradas para poder consultarlo fácilmente. Podemos hacer esto llamando a nl con la opción que numera las líneas en blanco (-b a):

$ nl -b a fichero > fichero_numerado.txt

tux_maestro_der Como el fichero de entrada no tiene delimitadores de página explícitos, la salida se numerará con una secuencia sencilla; nl no intentará imponer sus propios límites a la longitud de las páginas.

El archivo fichero_numerado.txt creado por este comando no se puede utilizar como script a causa de los números de línea que hay al comienzo de cada una. No obstante, puede abrirlo con un editor de texto o visualizarlo con un paginador como less para ver el texto y los números de línea que hay junto a los comandos que contiene.

PREPARAR UN FICHERO PARA IMPRIMIR CON PR

Si queremos imprimir un fichero de texto plano, lo recomendable es prepararlo con sus encabezados, saltos de páginas, etc. El comando pr está pensado para ello. en su forma básica, puede pasarle un fichero al comando:

$ pr miarchivo.txt

El resultado es un texto formateado para imprimir en una impresora de líneas (es decir pr asume una longitud de línea de 80 caracteres con una fuente mono espacial). Podemos utilizar pr en una pipe, tanto para aceptar la entrada proveniente de otro programa como para canalizar su salida hacia otro programa (el programa receptor podría ser lpr, que se utiliza para imprimir ficheros).

Por defecto pr genera una salida que incluye el texto original con encabezados que contienen la fecha y hora actuales, el nombre del fichero original y el numero de página. Se puede alterar el formato de la salida de varias maneras, entre las que se incluyen:

  • Generar una salida multicolumna.- Al pasar las opciones -numcols o --columns=numcols se crea una salida con el número de columnas determinado por numcols. Tenga en cuenta que pr no altera el formato del texto; si las líneas son demasiado largas, se truncaran o se desbordarán ocupando varias columnas.
  • Generar una salida con espacios dobles.- Las opciones -d o --double-space genera una salida con espacios dobles a partir de un fichero con espacios simples.
  • Utilizar un salto de página.- Normalmente, pr separa las páginas utilizando un número fijo de líneas en blanco. Esto funciona si su impresora utiliza el mismo número de líneas que espera pr. Si tiene problemas con esto, puede pasarle las opciones -F, -f o --form-feed, que hacen que pr cree una salida con un carácter de salto de página entre las páginas. Esto es más adecuado para ciertas impresoras.
  • Definir la longitud de página.- Las opciones -l líneas o bien --length=líneas definen la longitud de las líneas de página.
  • Definir texto del encabezado.- Las opciones -h texto o bien --header=texto definen el texto a mostrar en el encabezado, sustituyendo al nombre del fichero. Para especificar una cadena de varias palabras rodee ésta con comillas, como en --header="Mi Archivo". Las opciones -t o --omit-header omiten totalmente el encabezado.
  • Definir el margen izquierdo y el ancho de página.- Las opciones -o caracteres o --indent=caracteres definen el número de caracteres del margen izquierdo. El tamaño del margen se suma al ancho de la página, que por defecto es 72 caracteres, y puede ser ajustado con las opciones -w caracteres o --width=caracteres.

Estas opciones son sólo el comienzo; pr admite muchas más, que se describen en su página man. Para ver pr en acción, supongamos que desea imprimir una versión numerada y a doble espacio de un fichero de configuración (por ejemplo, /etc/profile/) para poder consultarlo. Esto lo puede hacer catalizando cat con su opción -n para generar la salida numerada, pr con su opción -d para que el resultado tenga doble espacio y lpr para imprimir fichero:

Ejemplo_pr
El resultado debería ser una impresión que sirviera para tomar notas sobre el fichero de configuración.

Ejemplo_pr2No obstante, debe tener en cuenta que que si el fichero contiene líneas que se acercan o exceden de los 80 caracteres de longitud, el resultado puede tener líneas tan largas que ocupen el espacio de dos, sobrepasando los límites de la página. Como solución, puede definir una longitud de página algo más corta con -l y -f para asegurarse de que la impresora recibe los saltos de página tras cada una de ellas:

$ cat -n /etc/profile | pr -dfl 50 | lpr

 

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