Nombre
gawk - lenguaje de escaneo y procesamiento de patrones
Sinopsis
papar moscas Opciones de estilo POSIX o GNU -F Archivo de programa -- expediente …papar moscas Opciones de estilo POSIX o GNU -- texto del programa expediente … pgawk Opciones de estilo POSIX o GNU -F Archivo de programa -- expediente …pgawk Opciones de estilo POSIX o GNU -- texto del programa expediente … Papar moscas es la implementación del lenguaje de programación AWK del Proyecto GNU. Se ajusta a la definición del idioma en POSIX 1003.2 Command Language And Utilities Standard. Esta versión a su vez se basa en la descripción de El lenguaje de programación AWK , por Aho, Kernighan y Weinberger, con las características adicionales que se encuentran en la versión System V Release 4 de UNIX awk . Papar moscas También ofrece los más recientes laboratorios Bell. awk extensiones, y una serie de extensiones específicas de GNU. Pgawk es la versión de perfil de papar moscas . Es idéntico en todos los sentidos. papar moscas , excepto que los programas se ejecutan más lentamente y producen automáticamente un perfil de ejecución en el archivo awkprof.out cuando termine. Ver el --perfil Opción, a continuación. La línea de comando consiste en opciones para papar moscas En sí, el texto del programa AWK (si no se suministra a través del -F o --expediente opciones), y los valores que se pondrán a disposición en el ARGC y ARGV variables AWK predefinidas. Papar moscas las opciones pueden ser opciones tradicionales de POSIX de una letra, o opciones largas de estilo GNU. Las opciones POSIX comienzan con un solo `` - '', mientras que las opciones largas comienzan con `` - ''. Se proporcionan opciones largas tanto para las características específicas de GNU como para las características obligatorias de POSIX. Siguiendo el estándar POSIX, papar moscas Las opciones específicas se suministran a través de argumentos al -W opción. Múltiple -W opciones pueden ser suministradas cada -W La opción tiene una opción larga correspondiente, como se detalla a continuación. Los argumentos para opciones largas se unen con la opción mediante una = firme, sin espacios intermedios, o se pueden proporcionar en el siguiente argumento de la línea de comando. Las opciones largas pueden abreviarse, siempre que la abreviatura siga siendo única. Papar moscas Acepta las siguientes opciones, listadas alfabéticamente. -F fs - separador de campo fs Utilizar fs para el separador de campo de entrada (el valor del FS variable predefinida). -v var = val --asignar var = val Asignar el valor val a la variable var , antes de que comience la ejecución del programa. Tales valores variables están disponibles para el EMPEZAR Bloque de un programa AWK. -F Archivo de programa --expediente Archivo de programa Lee la fuente del programa AWK del archivo Archivo de programa , en lugar de desde el primer argumento de línea de comando. Múltiple -F (o --expediente) Se pueden usar opciones. -mf NNN -señor NNN Establecer varios límites de memoria al valor NNN . los F bandera establece el número máximo de campos, y la r bandera establece el tamaño máximo de registro. Estas dos banderas y el -metro Las opciones son de la versión de investigación de los Laboratorios Bell de UNIX. awk . Son ignorados por papar moscas , ya que papar moscas No tiene límites predefinidos. -W compat -W tradicional --compat --tradicional Entrar corriendo compatibilidad modo. En modo de compatibilidad, papar moscas se comporta de manera idéntica a UNIX awk ; Ninguna de las extensiones específicas de GNU son reconocidas. El uso de --tradicional Se prefiere sobre las otras formas de esta opción. Ver EXTENSIONES GNU, a continuación, para más información. -W copyleft -W derechos de autor --copyleft --derechos de autor Imprima la versión corta del mensaje de información de copyright de GNU en la salida estándar y salga con éxito. -W variables-volcado= expediente --dump-variables= expediente Imprima una lista ordenada de variables globales, sus tipos y valores finales para expediente . Si no expediente está provisto, papar moscas usa un archivo llamado awkvars.out en el directorio actual. Tener una lista de todas las variables globales es una buena manera de buscar errores tipográficos en sus programas. También usaría esta opción si tiene un programa grande con una gran cantidad de funciones, y quiere asegurarse de que sus funciones no utilicen inadvertidamente variables globales que pretendía que fueran locales. (Este es un error particularmente fácil de cometer con nombres de variables simples como yo, j, y así.) -W ayuda -W uso --ayuda --uso Imprima un resumen relativamente corto de las opciones disponibles en la salida estándar. (Por el Normas de codificación GNU , estas opciones causan una salida inmediata y exitosa.) -W pelusa= fatal --hilas= fatal Proporcionan advertencias sobre construcciones dudosas o no portátiles a otras implementaciones de AWK. Con un argumento opcional de fatalLas advertencias de la pelusa se convierten en errores fatales. Esto puede ser drástico, pero su uso sin duda fomentará el desarrollo de programas AWK más limpios. -W pelusa de edad viejo Proporcione advertencias sobre construcciones que no son portátiles a la versión original de Unix awk . -W gen-po --gen-po Escanee y analice el programa AWK, y genere un GNU .correos Formato de archivo en salida estándar con entradas para todas las cadenas localizables en el programa. El programa en sí no se ejecuta. Ver el GNU gettext distribución para más información sobre .correos archivos. -W datos no decimales - datos no decimales Reconocer valores octales y hexadecimales en los datos de entrada. ¡Utilice esta opción con gran precaución! -W posix --posix Esto se enciende compatibilidad Modo, con las siguientes restricciones adicionales: * X Las secuencias de escape no son reconocidas. * Solo el espacio y la pestaña actúan como separadores de campo cuando FS se establece en un solo espacio, la nueva línea no lo hace. * No puedes continuar líneas después ? y :. * El sinonimo función para la palabra clave función no esta reconocido. * Los operadores ** y **= no se puede utilizar en lugar de ^ y ^=. * los fflush () La función no está disponible. -W perfil= prof_file --perfil= prof_file Enviar datos de perfil a prof_file . El valor predeterminado es awkprof.out. Cuando se ejecuta con papar moscas , el perfil es solo una versión `` bastante impresa '' del programa. Cuando se ejecuta con pgawk , el perfil contiene los recuentos de ejecución de cada instrucción en el programa en el margen izquierdo y los recuentos de llamadas de función para cada función definida por el usuario. -W re-intervalo --reparto Habilitar el uso de expresiones de intervalo en la concordancia de expresiones regulares (ver Expresiones regulares, abajo). Las expresiones de intervalo no estaban tradicionalmente disponibles en el lenguaje AWK. El estándar POSIX los agregó, para hacer awk y egrep coherentes entre sí. Sin embargo, es probable que su uso rompa los viejos programas AWK, por lo que papar moscas Solo los proporciona si se solicitan con esta opción, o cuando --posix está especificado. -W fuente texto del programa --fuente texto del programa Utilizar texto del programa como código fuente del programa AWK. Esta opción permite la fácil combinación de las funciones de la biblioteca (utilizada a través de -F y --expediente opciones) con el código fuente introducido en la línea de comando. Está destinado principalmente para programas AWK medianos a grandes utilizados en scripts de shell. -W versión --versión Imprimir la información de la versión para esta copia en particular de papar moscas En la salida estándar. Esto es útil principalmente para saber si la copia actual de papar moscas en su sistema está actualizado con respecto a lo que distribuye la Free Software Foundation. Esto también es útil cuando se reportan errores. (Por el Normas de codificación GNU , estas opciones causan una salida inmediata y exitosa.) -- Señala el final de las opciones. Esto es útil para permitir que más argumentos para el programa AWK comience con un `` ''. Esto es principalmente por coherencia con la convención de análisis de argumentos utilizada por la mayoría de los otros programas POSIX. En el modo de compatibilidad, cualquier otra opción se marca como no válida, pero de lo contrario se ignora. En el funcionamiento normal, siempre que se haya suministrado el texto del programa, se pasan opciones desconocidas al programa AWK en el ARGV matriz para su procesamiento. Esto es particularmente útil para ejecutar programas AWK a través del mecanismo de intérprete ejecutable `` #! ''. EJECUCION DEL PROGRAMA AWK Un programa AWK consiste en una secuencia de instrucciones de acción de patrón y definiciones de funciones opcionales. modelo { declaraciones de acción }función nombre ( lista de parámetros ) { declaraciones }
Papar moscas primero lee la fuente del programa del Archivo de programa (s) Si se especifica, de los argumentos a --fuente, o del primer argumento no opcional en la línea de comando. los -F y --fuente Las opciones se pueden usar varias veces en la línea de comando. Papar moscas lee el texto del programa como si todo el Archivo de programa Los textos fuente y de la línea de comando se habían concatenado juntos. Esto es útil para crear bibliotecas de funciones AWK, sin tener que incluirlas en cada nuevo programa AWK que las utiliza. También ofrece la posibilidad de combinar funciones de biblioteca con programas de línea de comandos. La variable de entorno AWKPATH especifica una ruta de búsqueda para usar cuando se encuentran archivos de origen nombrados con el -F opción. Si esta variable no existe, la ruta predeterminada es".: / usr / local / share / awk". (El directorio real puede variar, dependiendo de cómo papar moscas fue construido e instalado.) Si un nombre de archivo dado a la -F La opción contiene un carácter `` / '', no se realiza ninguna búsqueda de ruta. Papar moscas ejecuta programas AWK en el siguiente orden. Primero, todas las asignaciones de variables especificadas a través de -v Se realizan opciones. Siguiente, papar moscas compila el programa en una forma interna. Entonces, papar moscas ejecuta el codigo en el EMPEZAR bloque (s) (si los hay), y luego procede a leer cada archivo nombrado en el ARGV formación. Si no hay archivos nombrados en la línea de comando, papar moscas Lee la entrada estándar. Si un nombre de archivo en la línea de comando tiene la forma var = val Se trata como una asignación variable. La variable var se le asignará el valor val . (Esto sucede después de cualquier EMPEZAR se han ejecutado bloques.) La asignación de la variable de la línea de comando es más útil para asignar dinámicamente valores a las variables que usa AWK para controlar cómo se divide la entrada en campos y registros. También es útil para controlar el estado si se necesitan varias pasadas en un solo archivo de datos. Si el valor de un elemento particular de ARGV esta vacio (''), papar moscas salta sobre ella Para cada registro en la entrada, papar moscas pruebas para ver si coincide con alguna modelo en el programa AWK. Para cada patrón que coincida el registro, el asociado acción es ejecutado. Los patrones se prueban en el orden en que aparecen en el programa. Finalmente, una vez agotada toda la entrada, papar moscas ejecuta el codigo en el FIN bloque (s) (si los hay). Las variables AWK son dinámicas; surgen cuando se usan por primera vez. Sus valores son números de punto flotante o cadenas, o ambos, dependiendo de cómo se usan. AWK también tiene matrices unidimensionales; Pueden simularse matrices con múltiples dimensiones. Varias variables predefinidas se establecen como un programa se ejecuta; Estos se describirán según sea necesario y se resumirán a continuación. Normalmente, los registros están separados por caracteres de nueva línea. Puede controlar cómo se separan los registros asignando valores a la variable incorporada RS. Si RS Es cualquier carácter único, ese carácter separa los registros. De otra manera, RS Es una expresión regular. El texto en la entrada que coincide con esta expresión regular separa el registro. Sin embargo, en el modo de compatibilidad, solo el primer carácter de su valor de cadena se utiliza para separar registros. Si RS se establece en la cadena nula, luego los registros están separados por líneas en blanco. Cuando RS se establece en la cadena nula, el carácter de nueva línea siempre actúa como un separador de campo, además de cualquier valor FS puede tener. A medida que se lee cada registro de entrada, papar moscas divide el registro en campos , utilizando el valor de la FS Variable como separador de campo. Si FS es un solo carácter, los campos están separados por ese carácter. Si FS es la cadena nula, entonces cada carácter individual se convierte en un campo separado. De otra manera, FS Se espera que sea una expresión regular completa. En el caso especial de que FS es un espacio único, los campos están separados por ejecuciones de espacios y / o pestañas y / o nuevas líneas. (Pero ver la discusión de --posix, abajo). NOTA: El valor de IGNORAR CASO (ver más abajo) también afecta cómo se dividen los campos cuando FS es una expresión regular, y cómo se separan los registros cuando RS Es una expresión regular. Si el ANCHOS DE CAMPO la variable se establece en una lista de números separados por espacios, se espera que cada campo tenga un ancho fijo, y papar moscas Divide el registro utilizando los anchos especificados. El valor de FS se ignora Asignando un nuevo valor a FS anula el uso de ANCHOS DE CAMPO, y restaura el comportamiento por defecto. Cada campo en el registro de entrada puede ser referenciado por su posición, $1, $2, y así. $0 Es todo el registro. Los campos no necesitan ser referenciados por constantes: n = 5imprimir $ n Imprime el quinto campo en el registro de entrada. La variable NF se establece en el número total de campos en el registro de entrada. Referencias a campos no existentes (es decir, campos después de $ NF) producir la cadena nula. Sin embargo, la asignación a un campo no existente (por ejemplo, $ (NF + 2) = 5) aumenta el valor de NF, crea cualquier campo intermedio con la cadena nula como su valor, y causa el valor de $0 para volver a calcularse, con los campos separados por el valor de OFS. Las referencias a los campos numerados negativos causan un error fatal. Decremento NF hace que los valores de los campos más allá del nuevo valor se pierdan, y el valor de $0 para volver a calcularse, con los campos separados por el valor de OFS. La asignación de un valor a un campo existente hace que todo el registro se reconstruya cuando $0 se hace referencia. Del mismo modo, asignando un valor a $0 hace que el registro se vuelva a dividir, creando nuevos valores para los campos. Papar moscas Las variables incorporadas son: ARGC El número de argumentos de la línea de comando (no incluye opciones para papar moscas , o la fuente del programa). ARGIND El indice en ARGV del archivo actual en proceso. ARGV Matriz de argumentos de línea de comando. La matriz se indexa de 0 a ARGC - 1. Cambiando dinámicamente los contenidos de ARGV Puede controlar los archivos utilizados para los datos. BINMODE En sistemas que no son POSIX, especifica el uso del modo `` binario '' para todas las E / S de archivos. Los valores numéricos de 1, 2 o 3, especifican que los archivos de entrada, los archivos de salida o todos los archivos, respectivamente, deben usar I / O binario. Valores de cadena de "r"o "w" especifique que los archivos de entrada, o los archivos de salida, respectivamente, deben usar I / O binario. Valores de cadena de "rw" o "wr" especifique que todos los archivos deben usar E / S binario. Cualquier otro valor de cadena se trata como "rw", pero genera un mensaje de advertencia. CONVFMT El formato de conversión para números, "% .6g", por defecto. REINAR Una matriz que contiene los valores del entorno actual. La matriz está indexada por las variables de entorno, cada elemento es el valor de esa variable (por ejemplo,MEDIO AMBIENTE "INICIO" puede ser / casa / arnold). Cambiar esta matriz no afecta el entorno visto por los programas que papar moscas engendra a través de la redirección o la sistema()función. ERRNO Si se produce un error del sistema, ya sea haciendo una redirección para obtener línea, durante una lectura para obtener línea, o durante un cerrar(), entonces ERRNO contendrá una cadena que describe el error. El valor está sujeto a traducción en configuraciones regionales distintas del inglés. ANCHOS DE CAMPO Una lista de espacios en blanco separados por espacios en blanco. Cuando se establece, papar moscas analiza la entrada en campos de ancho fijo, en lugar de utilizar el valor del FS Variable como separador de campo. NOMBRE DEL ARCHIVO El nombre del archivo de entrada actual.Si no se especifica ningún archivo en la línea de comando, el valor de NOMBRE DEL ARCHIVO es `` - ''. Sin embargo, NOMBRE DEL ARCHIVO está indefinido dentro del EMPEZAR bloque (a menos que sea establecido por obtener línea). FNR El número de registro de entrada en el archivo de entrada actual. FS El separador de campo de entrada, un espacio por defecto. Ver Campos, encima. IGNORAR CASO Controla la distinción entre mayúsculas y minúsculas de todas las operaciones de expresiones regulares y cadenas. Si IGNORAR CASO tiene un valor distinto de cero, luego comparaciones de cadenas y coincidencia de patrones en las reglas, división de campos con FS, registro separándose con RS, coincidencia de expresiones regulares con ~y !~, y el gensub (), gsub (), índice(), partido(), división()y sub() Todas las funciones incorporadas ignoran el caso al realizar operaciones de expresiones regulares. NOTA: La suscripción de matrices es no afectado, ni es el un tipo() función. Por lo tanto, si IGNORAR CASO no es igual a cero, / aB / coincide con todas las cadenas "ab", "aB","Ab"y "AB". Al igual que con todas las variables AWK, el valor inicial de IGNORAR CASO es cero, por lo que todas las operaciones de expresiones regulares y de cadena normalmente distinguen entre mayúsculas y minúsculas. Bajo Unix, el conjunto completo de caracteres ISO 8859-1 Latin-1 se usa al ignorar mayúsculas y minúsculas. HILAS Proporciona control dinámico de la --hilas Opción desde dentro de un programa AWK. Cuando es verdad papar moscas Imprime avisos de pelusas. Cuando es falso, no lo hace. Cuando se asigna el valor de cadena "fatal", las advertencias de pelusas se convierten en errores fatales, exactamente como --lint = fatal. Cualquier otro valor verdadero simplemente imprime advertencias. NF El número de campos en el registro de entrada actual. NR El número total de registros de entrada visto hasta el momento. OFMT El formato de salida para números, "% .6g", por defecto. OFS El separador de campo de salida, un espacio por defecto. ORS El separador de registro de salida, por defecto una nueva línea. PROCINFO Los elementos de esta matriz proporcionan acceso a la información sobre el programa AWK en ejecución. En algunos sistemas, puede haber elementos en la matriz, "grupo 1" mediante "grupo norte ' para algunos norte , que es el número de grupos suplementarios que tiene el proceso. Utilizar el en Operador para probar estos elementos. Los siguientes elementos están garantizados para estar disponibles: PROCINFO "egid" el valor de la getegid (2) llamada al sistema. PROCINFO "euid" el valor de la geteuid (2) llamada al sistema. PROCINFO "FS" "FS" si el campo se divide con FS está en efecto, o "ANCHOS DE CAMPO" si el campo se divide con ANCHOS DE CAMPO está en efecto PROCINFO "gid" el valor de la getgid (2) llamada al sistema. PROCINFO "pgrpid" El ID de grupo de proceso del proceso actual. PROCINFO "pid" El ID de proceso del proceso actual. PROCINFO "ppid" el ID del proceso padre del proceso actual. PROCINFO "uid" el valor de la Getuid (2) llamada al sistema. RS El separador de registro de entrada, por defecto una nueva línea. RT El terminador de registro. Papar moscas conjuntos RT al texto de entrada que coincide con el carácter o la expresión regular especificada por RS. RSTART El índice del primer carácter emparejado por partido(); 0 si no hay partido. (Esto implica que los índices de caracteres comienzan en uno). RLENGTH La longitud de la cadena emparejada por partido(); -1 si no hay partido. SUBSEP El carácter utilizado para separar varios subíndices en elementos de matriz, de forma predeterminada ' 034'. TEXTDOMAIN El dominio de texto del programa AWK; Se utiliza para encontrar las traducciones localizadas para las cadenas del programa. Las matrices se subíndigan con una expresión entre corchetes ( y ). Si la expresión es una lista de expresiones ( expr , expr …) entonces el subíndice de matriz es una cadena que consiste en la concatenación del valor (cadena) de cada expresión, separada por el valor de SUBSEP variable. Esta facilidad se utiliza para simular matrices de múltiples dimensiones. Por ejemplo: i = "A"; j = "B"; k = "C"x i, j, k = "hola, mundo n" asigna la cadena "hola mundo n" al elemento de la matriz X que es indexado por la cadena"A 034B 034C". Todas las matrices en AWK son asociativas, es decir, indexadas por valores de cadena. El operador especial en puede ser utilizado en un Si o mientras declaración para ver si una matriz tiene un índice que consiste en un valor particular. if (val in array) imprimir matriz val Si la matriz tiene múltiples subíndices, use (i, j) en matriz. los en construcción también se puede utilizar en una para bucle para iterar sobre todos los elementos de una matriz. Un elemento puede ser eliminado de una matriz usando la borrar declaración. los borrar La declaración también se puede usar para eliminar todo el contenido de una matriz, solo especificando el nombre de la matriz sin un subíndice. Las variables y los campos pueden ser números (de coma flotante), cadenas o ambos. Cómo se interpreta el valor de una variable depende de su contexto. Si se usa en una expresión numérica, se tratará como un número, y si se usa como una cadena se tratará como una cadena. Para forzar que una variable sea tratada como un número, agregue 0 a ella; para forzarlo a ser tratado como una cadena, concaténalo con la cadena nula. Cuando una cadena debe convertirse en un número, la conversión se realiza usando Strtod (3). Un número se convierte en una cadena usando el valor de CONVFMT como una cadena de formato para sprintf (3), con el valor numérico de la variable como argumento. Sin embargo, aunque todos los números en AWK son de coma flotante, los valores integrales son siempre convertido en enteros. Así, dado CONVFMT = "% 2.2f" a = 12 b = a "" La variable segundo tiene un valor de cadena de '12' y no '12.00'. Papar moscas realiza las comparaciones de la siguiente manera: Si dos variables son numéricas, se comparan numéricamente. Si un valor es numérico y el otro tiene un valor de cadena que es una "cadena numérica", entonces las comparaciones también se hacen numéricamente. De lo contrario, el valor numérico se convierte en una cadena y se realiza una comparación de cadenas. Dos cadenas se comparan, por supuesto, como cadenas. Tenga en cuenta que el estándar POSIX aplica el concepto de `` cadena numérica '' en todas partes, incluso a las constantes de cadena. Sin embargo, esto es claramente incorrecto, y papar moscas no hace esto (Afortunadamente, esto se soluciona en la próxima versión del estándar). Tenga en cuenta que las constantes de cadena, tales como '57', son no Cadenas numéricas, son constantes de cadena. La idea de `` cadena numérica '' solo se aplica a los campos, obtener línea entrada, NOMBRE DEL ARCHIVO, ARGV elementos, REINAR elementos y los elementos de una matriz creada por división() que son cadenas numéricas. La idea básica es que entrada del usuario , y solo la entrada del usuario, que parece numérica, debe ser tratada de esa manera. Las variables sin inicializar tienen el valor numérico 0 y el valor de cadena "" (la cadena nula o vacía). A partir de la versión 3.1 de boquiabierto puede usar constantes octal y hexadecimales de estilo C en el código fuente de su programa AWK. Por ejemplo, el valor octal 011 es igual a decimal 9, y el valor hexadecimal 0x11 es igual al decimal 17. Las constantes de cadena en AWK son secuencias de caracteres entre comillas dobles ('). Dentro de las cuerdas, ciertas secuencias de escape Se reconocen, como en C. Estos son: \ Una barra invertida literal. una El carácter "alerta"; Por lo general, el personaje de ASCII BEL. segundo retroceso F form-feed.
orte nueva línea. r retorno de carro t pestaña horizontal v pestaña vertical X dígitos hexadecimales El carácter representado por la cadena de dígitos hexadecimales que siguen a la X. Como en ANSIC, todos los siguientes dígitos hexadecimales se consideran parte de la secuencia de escape. (Esta característica debería decirnos algo sobre el diseño del lenguaje por el comité.) Por ejemplo, " x1B" Es el carácter ASCIIESC (escape). ddd El carácter representado por la secuencia de 1, 2 o 3 dígitos de dígitos octales. P.ej., ' 033' es el carácter ASCII ESC (escape). do El caracter literal do . Las secuencias de escape también se pueden usar dentro de expresiones regulares constantes (por ejemplo,/ t f n r v / coincide con los caracteres de espacio en blanco). En el modo de compatibilidad, los caracteres representados por secuencias de escape octal y hexadecimal se tratan literalmente cuando se usan en constantes de expresiones regulares. Así, / a 52b / es equivalente a/ a * b /. AWK es un lenguaje orientado a líneas. El patrón viene primero, y luego la acción. Las declaraciones de acción están incluidas en { y }. O bien puede faltar el patrón, o puede faltar la acción, pero, por supuesto, no ambos. Si falta el patrón, la acción se ejecuta para cada registro de entrada. Una acción que falta es equivalente a { impresión } que imprime todo el registro. Los comentarios comienzan con el carácter `` # '' y continúan hasta el final de la línea. Se pueden usar líneas en blanco para separar las declaraciones. Normalmente, una declaración termina con una nueva línea, sin embargo, este no es el caso de las líneas que terminan en un ``, '', {, ?, :, &&o ||. Líneas que terminan en hacer o más También tienen sus declaraciones automáticamente continuadas en la siguiente línea. En otros casos, se puede continuar una línea terminándola con un ', en cuyo caso se ignorará la nueva línea. Se pueden poner varias declaraciones en una línea separándolas con un ``; ''. Esto se aplica tanto a las declaraciones dentro de la parte de acción de un par patrón-acción (el caso habitual), como a las propias declaraciones patrón-acción Los patrones AWK pueden ser uno de los siguientes: EMPEZAR FIN / expresión regular / expresión relacional modelo && modelo modelo || modelo modelo ? modelo : modelo ( modelo ) ! modelo patrón1 , patrón2 EMPEZAR y FIN Hay dos tipos especiales de patrones que no se comparan con la entrada. Las partes de acción de todos. EMPEZAR los patrones se fusionan como si todas las declaraciones se hubieran escrito en una sola EMPEZAR bloquear. Se ejecutan antes de que se lea cualquiera de las entradas. Del mismo modo, todos los FIN los bloques se fusionan y se ejecutan cuando se agota toda la entrada (o cuando un salida sentencia se ejecuta). EMPEZAR y FIN Los patrones no se pueden combinar con otros patrones en expresiones de patrones. EMPEZAR y FIN Los patrones no pueden faltar partes de acción. por / expresión regular / patrones, la instrucción asociada se ejecuta para cada registro de entrada que coincida con la expresión regular. Las expresiones regulares son las mismas que las de egrep (1), y se resumen a continuación. UNA expresión relacional Puede utilizar cualquiera de los operadores definidos a continuación en la sección de acciones. Estos generalmente prueban si ciertos campos coinciden con ciertas expresiones regulares. los &&, ||y ! los operadores son AND lógico, OR lógico y NOT lógico, respectivamente, como en C. Hacen una evaluación de cortocircuito, también como en C, y se usan para combinar expresiones de patrones más primitivos. Como en la mayoría de los idiomas, los paréntesis pueden usarse para cambiar el orden de evaluación. los ?: el operador es como el mismo operador en C. Si el primer patrón es verdadero, entonces el patrón utilizado para la prueba es el segundo, de lo contrario es el tercero. Solo se evalúa uno de los segundos y terceros patrones. los patrón1 , patrón2 La forma de una expresión se llama patrón de rango . Coincide con todos los registros de entrada que comienzan con un registro que coincide patrón1 , y continuando hasta un registro que coincide. patrón2 , inclusive. No se combina con ningún otro tipo de expresión de patrón. Las expresiones regulares son el tipo extendido encontrado en egrep . Están compuestos de caracteres de la siguiente manera: do coincide con el no metacaracter do . do coincide con el carácter literal do . . coincide con cualquier personaje incluso nueva línea. ^ coincide con el principio de una cadena. $ coincide con el final de una cadena. a B C… Lista de personajes, coincide con cualquiera de los personajes. a B C… . ^ a B C… lista de caracteres negados, coincide con cualquier carácter excepto a B C… . r1 | r2 alternancia: coincide ya sea r1 o r2 . r1r2 concatenación: partidos r1 , y entonces r2 . r + coincide con uno o más r 's. r * coincide con cero o más r 's. r ? coincide con cero o uno r 's. ( r ) agrupación: partidos r . r { norte } r { norte ,} r { norte , metro } Uno o dos números entre llaves denotan un expresión de intervalo . Si hay un número entre las llaves, la expresión regular anterior r se repite norte veces. Si hay dos números separados por una coma, r se repite norte a metro veces. Si hay un número seguido de una coma, entonces r se repite al menos norte veces. Las expresiones de intervalo solo están disponibles si --posix o --reparto Se especifica en la línea de comando. y coincide con la cadena vacía al principio o al final de una palabra. SEGUNDO coincide con la cadena vacía dentro de una palabra. < coincide con la cadena vacía al principio de una palabra. > coincide con la cadena vacía al final de una palabra. w coincide con cualquier carácter constituyente de la palabra (letra, dígito o guión bajo). W coincide con cualquier carácter que no sea constituyente de la palabra. ` coincide con la cadena vacía al principio de un búfer (cadena). ' coincide con la cadena vacía al final de un búfer. Las secuencias de escape que son válidas en constantes de cadena (ver más abajo) también son válidas en expresiones regulares. Clases de personajes 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 reales pueden variar de un país a otro y / o de un conjunto de caracteres a otro. Por ejemplo, la noción de lo que es un carácter alfabético difiere en los Estados Unidos y en Francia. Una clase de caracteres solo es válida en una expresión regular dentro Los paréntesis de una lista de caracteres. Clases de personajes consisten en :, una palabra clave que denota la clase, y :. Las clases de caracteres definidas por el estándar POSIX son: : alnum: Caracteres alfanuméricos. :alfa: Caracteres alfabéticos. :blanco: Espacio o tabuladores de caracteres. : cntrl: Personajes de control :dígito: Caracteres numéricos. :grafico: Caracteres que son imprimibles y visibles. (Un espacio es imprimible, pero no visible, mientras que una es a la vez. :inferior: Caracteres alfabéticos en minúsculas. :impresión: Caracteres imprimibles (caracteres que no son caracteres de control). : punteado: Caracteres de puntuación (caracteres que no son letras, dígitos, caracteres de control o caracteres de espacio). :espacio: Espacie los caracteres (como espacio, tabulador, y formfeed, para nombrar algunos). :Superior: Caracteres alfabéticos en mayúsculas. : xdigit: Caracteres que son dígitos hexadecimales. Por ejemplo, antes del estándar POSIX, para hacer coincidir los caracteres alfanuméricos, habría tenido que escribir / A-Za-z0-9 /. Si su conjunto de caracteres tenía otros caracteres alfabéticos, esto no coincidiría con ellos, y si su conjunto de caracteres se clasificara de manera diferente a ASCII, esto podría no coincidir con los caracteres alfanuméricos ASCII. Con las clases de caracteres POSIX, puede escribir/ : alnum: /y esto coincide con los caracteres alfabéticos y numéricos en su conjunto de caracteres. Dos secuencias especiales adicionales pueden aparecer en las listas de caracteres. Se aplican a los conjuntos de caracteres que no son ASCII, que pueden tener símbolos únicos (llamados elementos de clasificación ) que están representados con más de un carácter, así como varios caracteres que son equivalentes para compaginando , o clasificación, con fines. (Por ejemplo, en francés, una 'e' y una 'e' con acento grave son equivalentes.) Símbolos de clasificación Un símbolo de clasificación es un elemento de clasificación de múltiples caracteres encerrado en . y .. Por ejemplo, si ch es un elemento de clasificación, entonces .ch. es una expresión regular que coincide con este elemento de clasificación, mientras que ch es una expresión regular que coincide ya sea do o h. Clases de equivalencia Una clase de equivalencia es un nombre específico de la localidad para una lista de caracteres que son equivalentes. El nombre esta incluido en = y =. Por ejemplo, el nombre mi podría ser usado para representar todo el `` e, '' `` e ',' 'y `` e`.' 'En este caso, = e = es una expresión regular que coincide con cualquiera de mi, mi'o e`. Estas características son muy valiosas en lugares que no hablan inglés. Las funciones de la biblioteca que papar moscas los usos para la coincidencia de expresiones regulares actualmente solo reconocen clases de caracteres POSIX; No reconocen símbolos de clasificación o clases de equivalencia. los y, SEGUNDO, <, >, w, W, `y ' los operadores son específicos para papar moscas ; son extensiones basadas en instalaciones en las bibliotecas de expresiones regulares de GNU. Las diversas opciones de línea de comando controlan cómo papar moscas interpreta los caracteres en expresiones regulares. Sin opciones En el caso por defecto, papar moscas proporcione todas las facilidades de las expresiones regulares POSIX y los operadores de expresiones regulares theGNU descritos anteriormente. Sin embargo, las expresiones de intervalo no son compatibles. --posix Solo se admiten las expresiones regulares POSIX, los operadores GNU no son especiales. (P.ej., w coincide con un literal w). Se permiten expresiones de intervalo. --tradicional Unix tradicional awk las expresiones regulares son coincidentes. Los operadores de GNU no son especiales, las expresiones de intervalo no están disponibles y tampoco las clases de caracteres POSIX (: alnum: y así). Los caracteres descritos por octal y las secuencias de escape hexadecimales se tratan literalmente, incluso si representan metacaracteres de expresiones regulares. --reparto Permitir expresiones de intervalo en expresiones regulares, incluso si --tradicional se ha proporcionado. Las declaraciones de acción están entre llaves, { y }. Las declaraciones de acción consisten en las declaraciones de asignación, condicionales y bucles habituales que se encuentran en la mayoría de los idiomas. Los operadores, las declaraciones de control y las instrucciones de entrada / salida disponibles se modelan después de las de C. Los operadores en AWK, en orden de precedencia decreciente, son (…) Agrupamiento $ Referencia de campo. ++ -- Incremento y decremento, tanto prefijo como postfijo. ^ Exposiciónción (** También se puede utilizar, y **= para el operador de la asignación). + - ! Unary plus, unary minus y negación lógica. * / % Multiplicación, división y módulo. + - Adición y sustracción. espacio Concatenación de cuerdas. < > <= >= != == Los operadores relacionales regulares. ~ !~ Coincidencia de expresiones regulares, coincidencia negada. NOTA: No utilice una expresión regular constante (/ foo /) en el lado izquierdo de una ~ o !~. Utilice solo uno en el lado derecho. La expresion / foo / ~ exp tiene el mismo significado que (($ 0 ~ / foo /) ~ exp ). Esto suele ser no lo que se pretendía. en Membresía Array. && Y lógico. || OR lógico. ?: La expresión condicional de C. Esto tiene la forma expr1 ? expr2 : expr3 . Si expr1 es cierto, el valor de la expresión es expr2 de lo contrario es expr3 . Solo uno de expr2 y expr3 es evaluado = += -= *= /= %= ^= Asignación. Ambas asignaciones absolutas ( var = valor ) y la asignación de operador (las otras formas) son compatibles. Las declaraciones de control son las siguientes: Si ( condición ) declaración más declaración mientras ( condición ) declaración hacer declaración mientras ( condición ) para ( expr1 ; expr2 ; expr3 ) declaración para ( var en formación ) declaración descanso continuar borrar formación índice borrar formación salida expresión { declaraciones } Las declaraciones de entrada / salida son las siguientes: cerrar( expediente , cómo ) Cerrar archivo, tubería o co-proceso. El opcional cómo solo debe usarse cuando se cierra un extremo de una tubería de dos vías a un co-proceso. Debe ser un valor de cadena, ya sea "a" o "desde". obtener línea Conjunto $0 del siguiente registro de entrada; conjunto NF, NR, FNR. getline < expediente Conjunto $0 del próximo registro de expediente ; conjunto NF. obtener línea var Conjunto var del siguiente registro de entrada; conjunto NR, FNR. obtener línea var < expediente Conjunto var del próximo registro de expediente . mando | obtener línea var correr mando canalizando la salida ya sea en $0 o var , como anteriormente. mando | & getline var correr mando como co-proceso de canalización de la salida ya sea en $0 o var , como anteriormente. Los co-procesos son una papar moscas extensión. siguiente Deja de procesar el registro de entrada actual. El siguiente registro de entrada se lee y el procesamiento comienza nuevamente con el primer patrón en el programa AWK. Si se alcanza el final de los datos de entrada, el FIN bloque (s), en su caso, se ejecutan. siguiente archivo Deja de procesar el archivo de entrada actual. La siguiente lectura de registro de entrada proviene del siguiente archivo de entrada. NOMBRE DEL ARCHIVO y ARGIND se actualizan, FNR se restablece a 1, y el procesamiento comienza de nuevo con el primer patrón en el programa AWK. Si se alcanza el final de los datos de entrada, el FIN bloque (s), en su caso, se ejecutan. impresión Imprime el registro actual. El registro de salida se termina con el valor del ORS variable. impresión expr-list Imprime expresiones. Cada expresión está separada por el valor de la OFS variable. El registro de salida se termina con el valor del ORS variable. impresión expr-list > expediente Imprime expresiones en expediente . Cada expresión está separada por el valor de la OFS variable. El registro de salida se termina con el valor del ORS variable. printf fmt, expr-list Formato e impresión. printf fmt, expr-list > expediente Formato e impresión en expediente . sistema( cmd-line ) Ejecutar el comando cmd-line , y devolver el estado de salida. (Esto puede no estar disponible en sistemas que no sean POSIX). fflush expediente ) Vacíe todos los búferes asociados con el archivo de salida abierto o la tubería expediente . Si expediente falta, entonces la salida estándar se vacía. Si expediente es la cadena nula, entonces todos los archivos de salida abiertos y tuberías tienen sus buffers vaciados. Se permiten redirecciones de salida adicionales para impresión y printf. imprimir … >> expediente anexa salida a la expediente . imprimir … | mando escribe en una pipa. imprimir … | & mando envía datos a un co-proceso. los obtener línea el comando devuelve 0 al final del archivo y -1 en un error. Tras un error, ERRNO contiene una cadena que describe el problema. NOTA: Si utiliza una tubería o co-proceso para obtener línea, o de impresión o printf dentro de un bucle, tu debe utilizar cerrar() Para crear nuevas instancias del comando. AWK no cierra automáticamente las tuberías o los co-procesos cuando devuelven EOF. Las versiones AWK de la printf declaración y sprintf () La función (ver más abajo) acepta los siguientes formatos de especificación de conversión: %do Un personaje ASCII. Si el argumento utilizado para %do Es numérico, se trata como un carácter y se imprime. De lo contrario, se supone que el argumento es una cadena y se imprime el único primer carácter de esa cadena. %re, %yo Un número decimal (la parte entera). % e,% E Un número de punto flotante de la forma. - d.dddddde + - dd. los %MI usos de formato mi en lugar de mi. %F Un número de punto flotante de la forma. - ddd.dddddd. % g,% G Utilizar %mi o %F conversión, lo que sea más corto, con ceros no significativos suprimidos. los%SOL usos de formato %MI en lugar de %mi. % o Un número octal sin signo (también un entero). % u Un número decimal sin signo (de nuevo, un entero). % s Una cadena de caracteres. % x,% X Un número hexadecimal sin signo (un entero). los %X usos de formato A B C D E F en lugar dea B C D e F. %% Una sola % personaje; ningún argumento se convierte. Opcional, los parámetros adicionales pueden estar entre el % y la carta de control: contar $ Utilizar el contar 'th argumento en este punto en el formato. Esto se llama un especificador posicional y está destinado principalmente para su uso en versiones traducidas de cadenas de formato, no en el texto original de un programa AWK. Es un papar moscas extensión. - La expresión debe ser justificada a la izquierda dentro de su campo. espacio Para conversiones numéricas, prefija valores positivos con un espacio y valores negativos con un signo menos. + El signo más, que se usa antes del modificador de ancho (ver más abajo), dice que siempre se debe proporcionar un signo para las conversiones numéricas, incluso si los datos a formatear son positivos. los + anula el modificador de espacio. # Use una "forma alternativa" para ciertas letras de control. por % o, suministre un cero inicial. por %Xy %X, suministra un líder 0x o 0X para un resultado distinto de cero. por %mi, %MIy %F, el resultado siempre contiene un punto decimal. por %soly %SOL, los ceros finales no se eliminan del resultado. 0 Un liderazgo 0 (cero) actúa como un indicador, que indica que la salida se debe rellenar con ceros en lugar de espacios. Esto se aplica incluso a formatos de salida no numéricos. Este indicador solo tiene efecto cuando el ancho del campo es más ancho que el valor que se imprimirá. anchura El campo debe estar rellenado a este ancho. El campo se rellena normalmente con espacios. Si el 0Se ha usado la bandera, se rellena con ceros. . prec Un número que especifica la precisión que se debe utilizar al imprimir. Para el %mi, %MIy %Fformatos, esto especifica el número de dígitos que desea imprimir a la derecha del punto decimal. Para el %soly %SOL formatos, especifica el número máximo de dígitos significativos. Para el %re, % o, %yo, % u, %Xy %X formatos, especifica el número mínimo de dígitos para imprimir. por % s, especifica el número máximo de caracteres de la cadena que se debe imprimir. La dinámica anchura y prec Capacidades del ANSI C printf () Las rutinas son compatibles. UNA * en lugar de cualquiera anchura o prec especificaciones hace que sus valores se tomen de la lista de argumentos para printf o sprintf (). Para utilizar un especificador de posición con un ancho dinámico o precisión, suministre contar $ después de la * en la cadena de formato. Por ejemplo, "% 3 $ * 2 $. * 1 $ s". Al hacer redirección de E / S desde impresión o printf en un archivo, o a través de obtener línea de un archivo, papar moscas Reconoce ciertos nombres de archivo especiales internamente. Estos nombres de archivos permiten acceder a los descriptores de archivos abiertos heredados de papar moscas El proceso padre (usualmente el shell).
Descripción
Formato de opción
Opciones
Variables, registros y campos
Archivos
Campos
Variables incorporadas
Arrays
Mecanografía y conversión variables
Constantes octales y hexadecimales
Constantes de cadena
Patrones y Acciones
Patrones
Expresiones regulares
Comportamiento
Los operadores
Declaraciones de control
Declaraciones de E / S
La declaración de printf
Nombres de archivos especiales




