Section: Órdenes de Utilidad (1)
Updated: 19 Dic 1996
Index Return to Main
Contents
gawk - lenguaje de análisis y procesamiento de patrones
[ opciones del estilo POSIX o GNU ] -f
fichero-de-programa [ -- ] fichero ...
gawk [ opciones del estilo POSIX o GNU ] [ -- ]
texto-del-programa fichero ...
es la implementación del Proyecto GNU del lenguaje de programación AWK. Está conforme con la definición del lenguaje en el POSIX 1003.2 Command Language And Utilities Standard. Esta versión está basada, a su vez, en la descripción de The AWK Programming Language, escrito por Aho, Kernighan, y Weinberger, con las características adicionales que aparecen en la versión del System V de UNIX awk. Gawk igualmente provee de las recientes extensiones del awk de Bell Labs, y algunas extensiones específicas de GNU.
La línea de orden consiste en opciones para el propio gawk , el texto del programa AWK (si no se provee mediante las opciones -f o --file ), y los valores que deben estar disponibles en las variables predefinidas de AWK ARGC y ARGV .
Las opciones de Gawk pueden seguir tanto el estilo tradicional de opciones de una letra de POSIX , como el estilo GNU de opciones largas. Las opciones POSIX comienzan con un solo ''-'', mientras que las opciones largas lo hacen con ''--''. Se ofrecen opciones largas tanto para las características específicas de GNU como para las características definidas por POSIX.
Siguiendo el estándar POSIX, las opciones específicas de gawk se proveen vía argumentos con la opción -W . Pueden añadirse múltiples opciones -W . Cada una de las opciones -W tienen su correspondiente opción larga, tal y como de detalla más adelante. Los argumentos de las opciones largas deben estar unidas a la opción mediante un signo = , sin espacios en blanco, o pueden proveerse en el siguiente argumento de la línea de orden. Las opciones largas pueden ser abreviadas, siempre y cuando la abreviatura sea única.
Gawk acepta las siguientes opciones.
En el modo compatibilidad, cualquier otra opción será marcada como ilegal, aunque sean ignoradas. En operación normal, mientras el texto del programa haya sido incluido, las opciones no reconocidas son pasadas al programa AWK en la tabla ARGV para ser procesadas. Es particularmente útil para ejecutar programas AWK mediante el mecanismo de intérprete de ejecutables ''#!''.
Un programa AWK consiste en una secuencia de sentencias tipo patrón-acción y definiciones de función opcionales.
patrón { sentencias de acción
}
function nombre(lista de
parámetros) { sentencias }
Gawk primero lee el fuente del programa a partir de los fichero(s)-de-programa si se han especificado, a partir de los argumentos de --source, o a partir del primer argumento que no sea una opción de la línea de orden. Las opciones -f y --source pueden ser usadas más de una vez en una línea de orden. Gawk leerá el texto del programa como si todos los fichero(s)-de-programa y textos fuentes de la línea de orden hubieran sido concatenados. Esto es útil para construir librerías de funciones AWK, sin tener la necesidad de incluirlos en cada uno de los nuevos programas AWK que las use. Además ofrece la capacidad de mezclar funciones de librería con programas de la línea de orden.
La variable de entorno AWKPATH especifica un camino de búsqueda para ser usado cuando se busque los ficheros indicados con la opción -f . Si esta variable no existiera, el camino por defecto sería ".:/usr/local/share/awk". (El directorio actual puede variar, dependiendo de desde donde se compiló e instaló gawk .) Si un fichero dado a la opción -f contiene un carácter ''/'', no se realiza ningún tipo de búsqueda.
Gawk ejecuta los programas AWK en el siguiente orden. Primero, todas las asignaciones de variables especificadas mediante la opción -v se realizan. A continuación, gawk compila el programa en un formato interno. Después, gawk ejecuta el código del/los bloque(s) BEGIN (si existe alguno), y a continuación procede a leer cada uno de los ficheros nombrados en la tabla ARGV . Si no existe ningún nombre de fichero en la línea de orden, gawk lee de la entrada estándar.
Si el nombre de un fichero en la línea de orden tiene la forma var=val será tratado como una asignación de variable. Se asignará a la variable var el valor val. (Esto ocurre después de que cualquier bloque(s) BEGIN haya sido ejecutado.) Las asignaciones en la línea de orden es útil sobre todo para asignar valores de forma dinámica a las variables que AWK usa para controlar cómo es troceada la entrada en campos y registros. Es también útil para controlar el estado si son necesarios múltiples pasos sobre el mismo fichero de datos.
Si el valor de alguno de los elementos particulares de ARGV está vacío (""), gawk se lo salta.
Para cada registro de la entrada, gawk prueba si es posible ajustarlo con alguno de los patrones en el programa AWK. Para cada patrón con el cual el registro concuerde, se ejecuta la acción asociada. Los patrones son probados en el orden en que aparecen en el programa.
Finalmente, después de que toda la entrada se ha terminado, gawk ejecuta el código en el/los bloque(s) END (si existiera alguno).
Las variables AWK son dinámicas; su existencia comienza cuando son usadas por primera vez. Sus valores son números de coma flotante o cadenas de caracteres, o ambos, dependiendo de cómo son usadas. AWK también dispone de tablas unidimensionales; las tablas multidimensionales pueden ser simuladas. Varias variables predefinidas se definen cuando un programa comienza a ejecutarse; serán descritas cuando convenga y serán resumidas más adelante.
Normalmente, los registros se separan por caracteres de salto de línea. Puede controlar cómo son separados los registros asignando valores a la variable predefinida RS. Si RS tiene un único carácter, ese carácter separará los registros. De otro modo, RS se considerará como una expresión regular. El texto de la entrada que concuerde con esa expresión regular será el que separará los registros. De todas maneras, en el modo compatibilidad, solo el primer carácter de esa cadena será usado para separar registros. Si RS contiene la cadena vacía, entonces los registros serán separados por espacios en blanco. Cuando RS contiene la cadena vacía, el carácter de salto de línea siempre actúa como separador de campos, añadiéndose a cualquier valor que FS pudiera tener.
Conforme cada registro de entrada es leído, gawk divide el registro en campos, usando el valor de la variable FS como separados de campos. Si FS tiene un único carácter, los campos serán separados por ese carácter. Si FS contiene la cadena vacía, entonces cada carácter individual se convierte en separador de campo. De otro modo, se espera que FS sea una expresión regular completa. En el caso especial de que FS tuviera un único espacio en blanco, los campos serían separados por tiras de espacios y/o tabuladores y/o saltos de línea. (Vea la discusión sobre --posix, más adelante). Nótese que el valor de IGNORECASE (vea más adelante) afectará también a cómo son divididos los registros en el caso de que FS fuera una expresión regular, y a cómo son separados cuando RS fuera una expresión regular.
Si la variable FIELDWIDTHS está definida como una lista de número separados por espacios, se espera que cada campo tenga ancho fijo, y gawk dividiría el registro usando los anchos especificados. El valor de FS es ignorado es este caso. Asignar un nuevo valor a FS haría saltarse el uso de FIELDWIDTHS, y volver a la forma de actuar por defecto.
Cada campo en el registro de entrada puede ser referenciado por su posición, $1, $2, etc. $0 es el registro completo. El valor de un campo puede ser también asignado. Los campos no necesitan ser referenciados por constantes:
n = 5
print $n
imprime el quinto campo del registro de entrada. La variable NF se define con el número total de campos en el registro de entrada.
Las referencias a campos que no existen (por ejemplo los campos por detrás de $NF) producen la cadena vacía. De todas maneras, la asignación de un campo no existente (por ejemplo, $(NF+2) = 5) incrementaría el valor de NF, creando los campos que intervienen como cadenas vacías, y causando que el valor de $0 fuera recalculado, siendo separados los campos mediante el valor de OFS. Las referencias a campos con numeración negativa causan un error fatal. Decrementar NF causa que el valor de los campos que pasen del nuevo número se pierda, y el valor de $0 sea recalculado, siendo separados los campos mediante el valor de OFS.
Las variables predefinidas de gawk son:
Las tablas se indexan mediante una expresión entre corchetes ([ y ]). Si la expresión es una lista de expresiones (expr, expr ...) entonces el índice de la tabla es una cadena de caracteres resultado de la concatenación de los valores (cadenas) de cada una de las expresiones, separados por el valor de la variable SUBSEP Esta capacidad se utiliza para simular tablas de múltiples dimensiones. Por ejemplo:
asigna la cadena "hola, mundo\n" al elemento de la tabla x que está indexado por la cadena "A\034B\034C". Todas las tablas en AWK son asociativas, es decir, indexadas por valores de tipo cadena.
El operador especial in puede ser usado en las órdenes if o while para comprobar si una tabla contiene un índice consistente en un valor particular.
if (val in tabla) print tabla[val]
Si la tabla tiene múltiples subíndices, use (i, j) in tabla.
La construcción in también puede usarse en bucles de tipo for para iterar sobre todos los elementos de una tabla.
Un elemento puede ser eliminado de una tabla usando la orden delete La orden delete puede ser usada también para borrar completamente los contenidos de una tabla, simplemente especificando el nombre de la tabla sin ningún índice.
Las variables y los campos pueden ser números (de coma flotante), o cadenas de caracteres, o ambos. Dependerá del contexto cómo será interpretado el valor de una variable. Si se usa en una expresión numérica, será tratado como número, si se usa como una cadena será tratada como una cadena.
Para forzar que una variable sea tratada como un número, sumele un 0; para forzar que sea tratada como una cadena, concaténela con la cadena vacía.
Cuando una cadena debe ser convertida a número, la conversión se realiza usando atof(3). Un número es convertido en cadena usando el valor de CONVFMT como cadena de formato para sprintf(3), con el valor numérico de la variable como el argumento. De todas maneras, aunque todos los números en AWK son reales de coma flotante, los valores enteros son siempre convertidos como enteros. De tal manera que, dados
CONVFMT = "%2.2f" a = 12 b = a ""
la variable b contendrá el valor de tipo cadena "12" y no "12.00".
Gawk realiza comparaciones tal y como sigue: Si dos variables son numéricas, son comparadas numéricamente. Si un valor es numérico y el otro tiene un valor de tipo cadena que es un ``cadena numérica'', entonces las comparaciones se hacen numéricamente. En otro caso, el valor numérico es traducido a cadena y se comparan en forma de cadena. Dos cadenas se comparan, por supuesto, en forma de cadena. De acuerdo con el estándar POSIX, si dos cadenas fueran cadenas numéricas debería realizarse una comparación numérica. De todas maneras, esto es claramente incorrecto, y gawk no lo hace así.
Nótese que las constantes de tipo cadena, como "57", no son cadenas numéricas, sino constantes de cadena. La idea de ``cadena numérica'' solo se aplica a los campos, entradas con getline , los elementos de FILENAMEy ARGV , elementos de ENVIRON y los elementos de una tabla creada mediante split() que son cadenas numéricas. La idea básica es que las entradas de usuario, y solo las entradas de usuario, que parezcan numéricas, serán tratadas de esta manera.
Las variables sin inicializar tendrán el valor numérico 0 y la cadena "" (cadena nula o vacía).
AWK es un lenguaje orientado a la línea. Primero se indica el patrón, y luego la acción. Las sentencias de las acciones se engloban mediante { y }. Puede no indicarse el patrón o la acción, pero por supuesto, no ambos. Si no se especifica el patrón, la acción será ejecutada por cada uno de los registros individuales de la entrada. Si no se especifica la acción es equivalente a escribir la acción
{ print }
la cual imprime el registro completo.
Los comentarios comienzan con el carácter ``#'', y continúan hasta el final de la línea. Pueden usarse líneas en blanco para separar sentencias. Normalmente, una sentencia termina con un salto de línea, aunque este no es el caso de las líneas que finalizan con un ``,'', {, ?, :, &&, o ||. Las líneas que terminan con do o else también se considera que continúan en la siguiente línea. En otros casos, una línea podrá ser continuada en la siguiente poniendo al final un ``\'', en cuyo caso se ignorará el salto de línea.
Se pueden poner múltiples sentencias en la misma línea separándolos mediante un ``;''. Esto se aplica tanto para las sentencias que componen la parte de la acción de un par patrón-acción (el caso más usual), como para las propias sentencias patrón-acción.
Los patrones de AWK pueden ser uno de los siguientes:
BEGIN END /expresión regular/ expresión relacional patrón && patrón patrón || patrón patrón ? patrón : patrón (patrón) ! patrón patrón1, patrón2
BEGIN y END son dos patrones de tipo especial que no son utilizados para comprobarlos contra la entrada. Las acciones de todos los patrones BEGIN se juntan como si todas las sentencias hubieran sido escritas en un único bloque BEGIN . Son ejecutadas antes de que se lea algo de la entrada. De forma análoga, todos los bloques END se juntan, y son ejecutados cuando se ha agotado toda la entrada (o cuando se ejecuta una sentencia exit ). Los patrones BEGIN y END no pueden ser combinados con otros patrones en expresiones de patrón. Los patrones BEGIN y END no pueden tener vacía la parte de la acción.
Para los patrones con /expresiones regulares/ , la sentencia asociada se ejecuta para cada registro de entrada que concuerde con la expresión regular. Las expresiones regulares son las mismas que las usadas en egrep(1), y se encuentran resumidas más adelante.
Una expresión relacional puede usar cualquiera de los operadores definidos en la parte de acciones de esta sección. Estas generalmente comprueban si ciertos campos concuerdan con una cierta expresión regular.
Los operadores &&, ||, y ! son respectivamente la Y lógica, la O lógica, y la NO lógica, como en C. Hacen evaluaciones de circuito corto, también como en C, y se usan para combinar varias expresiones de patrón primitivas. Como en la mayoría de los lenguajes, pueden usarse paréntesis para cambiar el orden de la evaluación.
El operador ?: es igual que el mismo operador en C. Si el primer patrón es cierto el patrón usado para las comprobaciones es el segundo, en caso contrario es el tercero. De entre el segundo y el tercer patrón, solo es evaluado uno de ellos.
La forma patrón1, patrón2 para una expresión recibe el nombre de rango de patrones. Concuerda con todos los registros de la entrada que existan entre el registro que concuerde con patrón1, y el registro que concuerde con patrón2, inclusive. No combina con ningún otro tipo de expresión de patrón.
Las expresiones regulares corresponden con el tipo extendido usado en egrep. Están compuestas por caracteres como sigue:
Las expresiones de intervalo solo están disponibles si se especifica --posix o --re-interval en la línea de orden.
Las secuencias de escape que son válidas en las constantes de cadena (vea abajo) son también legales en las expresiones regulares.
Las clases de caracteres son una nueva característica introducida en el estándar POSIX. Una clase de caracteres es una notación especial para describir listas de caracteres que tienen un atributo específico, pero donde los caracteres en sí mismos pueden variar entre países diferentes y/o entre juegos de caracteres diferentes. Por ejemplo, la noción de lo que es un carácter alfanumérico difiere entre los EEUU y Francia.
Una clase de caracteres solo es válida en una expreg dentro de las llaves de una lista de caracteres. Las clases de caracteres consisten en [:, una palabra clave que denota la clase, y :]. Estas son las clases de caracteres definidas por el estándar POSIX.
Por ejemplo, antes del estándar POSIX, para concordar caracteres alfanuméricos, tendría que haber escrito /[A-Za-z0-9]/. Si su juego de caracteres contiene otros caracteres alfabéticos, esta especificación no los hubiera recogido. Usando las clases de caracteres de POSIX, puede escribir /[[:alnum:]]/, y esto concordaría con todos los caracteres alfabéticos y numéricos de su juego de caracteres.
Adicionalmente en las listas de caracteres pueden aparecer dos secuencias especiales. Esto se aplica a los juegos de caracteres no ASCII, los cuales pueden contener símbolos (llamados elementos equivalentes) los cuales son representados por más de un carácter, al igual que varios caracteres que son equivalentes para propósitos de comparación u ordenación. (Por ejemplo, en Español, una ``e'' normal y una con tilde "á" son equivalentes.)
Estas características son especialmente útiles para las localizaciones de habla no inglesa. Las funciones de librería que usa gawk para el ajuste de expresiones regulares solo reconoce las clases de caracteres POSIX; no reconocen ni los símbolos equivalentes ni las clases de equivalencia.
Los operadores \y, \B, \<, \>, \w, \W, \`, y \' son específicos para gawk; son extensiones basadas en las capacidades de las librerías de expresiones regulares de GNU.
Varias opciones de la línea de ordenes controlan cómo gawk interpreta los caracteres en las expresiones regulares.
Las sentencias de las acciones se engloban entre llaves, { y }. Las sentencias de las acciones consisten en las habituales sentencias de asignación, condicionales y bucles que pueden encontrarse en la mayoría de los lenguajes. Los operadores, sentencias de control, y sentencias de entrada/salida disponibles son parecidas a las equivalentes de C.
Los operadores en AWK, en orden decreciente de precedencia, son
Las sentencias de control son las siguientes:
if (condición) sentencia [ else sentencia ] while (condición) sentencia do sentencia while (condición) for (expr1; expr2; expr3) sentencia for (var in tabla) sentencia break continue delete tabla[índice] delete tabla exit [ expresión ] { sentencias }
Las sentencias de entrada/salida son las siguientes:
También se permiten redirecciones de entrada/salida. Para print y printf, >>fichero añade la salida a fichero, mientras que | orden escribe en una tubería. De forma similar, orden | getline escribe mediante una tubería en getline. La orden getline retornará 0 en el final del fichero, y -1 en caso de error.
Las versiones AWK de la sentencia printf y de la función sprintf() (véase a continuación) aceptan la siguiente especificación para formatos de conversión:
Estos son parámetros opcionales que pueden ponerse entre el % y la letra de control:
Las características de anchura y prec dinámicas de las rutinas printf() del ANSI C también son soportadas. Un * en el lugar de las especificaciones de anchura o de prec causará que sus valores sean tomados a partir de la lista de argumentos de printf o sprintf().
Cuando se realiza redirección de la E/S tanto desde print como de printf en un fichero, o mediante getline a partir de un fichero, gawk reconoce internamente ciertos nombres especiales de ficheros. Estos nombres de ficheros permiten acceder a descriptores de ficheros abiertos heredados del proceso padre de gawk (normalmente el shell.) Otros nombres especiales proveen acceso a información sobre la ejecución del proceso gawk Los nombres de ficheros son:
Son particularmente útiles para los mensajes de error. Por ejemplo:
donde, de otra manera, tendría que haber usado
Estos nombres de fichero pueden usarse también en la línea de orden para nombrar ficheros de datos.
AWK dispone de las siguientes funciones aritméticas predefinidas:
Gawk dispone de las siguientes funciones predefinidas para cadenas:
Teniendo en cuenta que uno de los principales usos de los programas AWK es el procesamiento de ficheros de registro (log files) que contienen información de registro de tiempo, gawk proporciona las siguientes funciones para obtener registros de tiempo y darles formato.
Las constantes de cadena en AWK son secuencias de caracteres entre dobles comillas ( ). Dentro de las cadenas, se reconocen determinadas secuencias de escape , como en C. Son las siguientes:
Las secuencias de escape pueden usarse también dentro de constantes de expresiones regulares (p.ej., /[ \t\f\n\r\v]/ se ajusta con espacios en blanco).
En el modo de compatibilidad, los caracteres representados por secuencias de escape en octal o hexadecimal son tratados literalmente cuando son usados en contantes de expresiones regulares. Así, /a\52b/ es equivalente a /a\*b/.
La funciones en AWK se definen de la siguiente manera:
Las funciones se ejecutan cuando son llamadas desde dentro de las expresiones tanto desde patrones o acciones. Los parámetros reales usados en la llamada a la función se usan para instanciar los parámetros formales declarados en la función. Las tablas se pasan por referencia, las otras variables se pasan por valor.
Ya que las funciones no formaban parte originalmente del lenguaje AWK, el uso de variables locales es un tanto chapucero: Son declaradas como parámetros extra en la lista de parámetros. Por costumbre se separan las variables locales de los parámetros reales por espacios en blanco adicionales en la lista de parámetros. Por ejemplo:
function f(p, q, a, b) # a & b son locales { ..... } /abc/ { ... ; f(1, 2) ; ... }
Es necesario que el paréntesis izquierdo en una llamada a función siga inmediatamente al nombre de la función, sin añadir ningún espacio en blanco. Esto es necesario para evitar ambigüedades sintácticas con el operador de concatenación. Esta restricción no se aplica a las funciones predefinidas listadas anteriormente.
Las funciones pueden llamarse las unas a las otras y pueden ser recursivas. Los parámetros usados como variables locales son inicializados con una cadena vacía y el número cero en la invocación de la función.
Si se indicó --lint , gawk generará mensajes de alarma sobre llamadas a funciones no definidas en tiempo de análisis, en vez de en tiempo de ejecución. Llamar a una función no definida en tiempo de ejecución es un error fatal.
Puede usarse la palabra func en vez de function.
Imprimir y ordenar los nombres de ingreso de todos los usuarios: BEGIN { FS = ":" } { print $1 | "sort" } Contar las líneas de un fichero: { nlines++ } END { print nlines } Añadir el número de línea al principio de cada una en el fichero: { print FNR, $0 } Concatenar y número de línea (una variación del ejercicio): { print NR, $0 }
(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2), getgroups(2)
The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
AWK Language Programming, Edition 1.0, published by the Free Software Foundation, 1995.
Un objetivo principal de gawk es la compatibilidad con el estándar POSIX, y a su vez la compatibilidad con la última versión del awk de UNIX . Hasta la fecha, gawk incorpora las siguientes capacidades para el usuario que no se describen en el libro de AWK, pero que forman parte de la versión de Bell Labs de awk, y se encuentran en el estándar POSIX .
La opción -v para asignar variables antes de la ejecución del programa es nueva. El libro dice que las asignaciones de variables de la línea de órdenes ocurrirían cuando awk abriera el argumento como un fichero, lo cual es antes de ejecutar el bloque BEGIN . De todos modos, en implementaciones más modernas, cuando una asignación como esta aparece antes que ningún nombre de fichero, la asignación ocurriría antes de que el bloque BEGIN fuera ejecutado. Las aplicaciones acostumbran a depender de esta ``característica.'' Cuando awk fue modificado para acomodarse a su documentación, se añadió esta opción para acomodar a las aplicaciones que dependen de esta vieja característica. (Esta característica fue aceptada tanto por los desarrolladores de AT&T como por los de GNU.)
La opción -W para implementación de características específicas pertenece al estándar POSIX.
Durante el procesado de argumentos, gawk usa la opción especial ``--'' para señalar el final de los argumentos. En modo compatibilidad, las opciones no definidas darán un mensaje de alerta, pero de todos modos son ignoradas. En operación normal, estos argumentos son pasados al programa AWK para que sean procesados.
El libro de AWK no define el valor de retorno de srand(). El estándar POSIX hace que devuelva la semilla que estaba usando, para permitir seguir la pista de las secuencias de números aleatorios. Por este motivo, srand() en gawk devuelve igualmente la semilla actual.
Otras características nuevas son: El uso de múltiples opciones -f (a partir de MKS awk); la tabla ENVIRON ; las secuencias de escape \a, y \v (implementadas originalmente en gawk y añadidas en la versión de AT&T); las funciones predefinidas tolower() y toupper() (a partir de AT&T); y las especificaciones de conversión de ANSI C en printf (implementadas por primera vez en la versión de AT&T).
contiene una serie de extensiones del awk de POSIX. Se describen en esta sección. Las extensiones que se describen aquí pueden desactivarse llamando a gawk con la opción --traditional .
Las siguientes capacidades de gawk no están disponibles en el awk de POSIX.
El libro de AWK no define el valor de retorno de la función close() . El close() de gawk devuelve el valor de fclose(3), o pclose(3), cuando se esté cerrando un fichero o una tubería, respectivamente.
Cuando se invoca a gawk con la opción --traditional , si el argumento fs para la opción -F es ``t'', entonces se asignará a FS el carácter tabulador. Nótese que escribiendo gawk -F\t ... simplemente se provoca que el shell lo cambie por el literal ``t'', y no pase ``\t'' a la opción -F . Dado que es un caso un tanto especial y bastante desagradable, esta no es la manera por defecto de actuar. Tampoco se actúa de esta manera si se ha especificado --posix . Para tener un tabulador como separador de campo, es mejor usar el entrecomillado: gawk -F'\t' ....
Se concede permiso para copiar y distribuir versiones modificadas de esta página de manual bajo las condiciones de la copia literal, siendo los resultados completos del trabajo derivado distribuidos bajo los términos de una nota de permisos idéntica a esta.
Se concede permiso para copiar y distribuir traducciones de esta página de manual a otros idiomas, bajo las anteriores condiciones para versiones modificadas, exceptuando que esta nota de permisos debe manifestarse mediante una traducción aprobada por la Fundación.
Nota del traductor: Dado que la traducción de esta nota no está aprobada por la Free Software Foundation, se añade la nota original en Inglés.
Copyright © 1996 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to process this file through troff and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual page).
Permission is granted to copy and distribute modified versions of this manual page under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual page into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.
This document was created by man2html, using
the manual pages.
Time: 20:28:07 GMT, January 21, 2005