This commit is contained in:
hugo 2017-07-15 12:08:09 -07:00
parent 1a2d09eb81
commit bad152cde0

View File

@ -297,16 +297,16 @@ a > 0 {
# Esto se ejecutará una vez por línea, mientras a sea positivo # Esto se ejecutará una vez por línea, mientras a sea positivo
} }
# You get the idea. Processing text files, reading in a line at a time, and # Y ya te das una idea. Procesar archivos de texto, leyendo una línea a la vez,
# doing something with it, particularly splitting on a delimiter, is so common # y haciendo algo con ella, particularmente separando en un deliminator, es tan
# in UNIX that AWK is a scripting language that does all of it for you, without # común en UNIX que AWK es un lenguaje de scripting que hace todo eso por ti
# you needing to ask. All you have to do is write the patterns and actions # sin que tengas que pedirlo. Basta con escribir los patrones y acciones
# based on what you expect of the input, and what you want to do with it. # basados en lo que esperas de la entrada y lo quieras quieras hacer con ella.
# Here's a quick example of a simple script, the sort of thing AWK is perfect # Aquí está un ejemplo de un script simple, para lo que AWK es perfecto.
# for. It will read a name from standard input and then will print the average # El script lee un nombre de stdin y muestra el promedio de edad para todos los
# age of everyone with that first name. Let's say you supply as an argument the # que tengan ese nombre. Digamos que como argumento pasamos el nombre de un
# name of a this data file: # archivo con este contenido:
# #
# Bob Jones 32 # Bob Jones 32
# Jane Doe 22 # Jane Doe 22
@ -314,50 +314,50 @@ a > 0 {
# Bob Smith 29 # Bob Smith 29
# Bob Barker 72 # Bob Barker 72
# #
# Here's the script: # Éste es el script:
BEGIN { BEGIN {
# First, ask the user for the name # Primero, pedir al usuario el nombre
print "What name would you like the average age for?" print "¿Para qué nombre quieres el promedio de edad?"
# Get a line from standard input, not from files on the command line # Recuperar una línea de stdin, no de archivos en la línea de comandos
getline name <"/dev/stdin" getline name <"/dev/stdin"
} }
# Now, match every line whose first field is the given name # Ahora, hacer match con cada línea cuyo primer campo es el nombre dado
$1 == name { $1 == name {
# Inside here, we have access to a number of useful variables, already # Aquí dentro tenemos acceso a variables útiles precargadas:
# pre-loaded for us: # $0 es toda la línea
# $0 is the entire line # $3 es el tercer campo, la edad, que es lo que nos interesa
# $3 is the third field, the age, which is what we're interested in here # NF es el número de campos, que debe ser 3
# NF is the number of fields, which should be 3 # NR es el número de registros (líneas) vistos hasta ahora
# NR is the number of records (lines) seen so far # FILENAME es el nombre del archivo que está siendo procesado
# FILENAME is the name of the file being processed # FS es el campo separador, " " en este caso
# FS is the field separator being used, which is " " here # Y muchas más que puedes conocer ejecutando 'man awk' en la terminal.
# ...etc. There are plenty more, documented in the man page.
# Keep track of a running total and how many lines matched # Llevar el registro de la suma y cuantas líneas han hecho match.
sum += $3 sum += $3
nlines++ nlines++
} }
# Another special pattern is called END. It will run after processing all the # Otro patrón especial es END. Va a ejecutarse después de procesar todos los
# text files. Unlike BEGIN, it will only run if you've given it input to # archivos de texto. A diferencia de BEGIN, sólo se ejecuta si le das dado una
# process. It will run after all the files have been read and processed # entrada a procesar. Se ejecutará después de que todos los archivos hayan sido
# according to the rules and actions you've provided. The purpose of it is # leídos y procesados según las reglas y acciones que programaste. El propósito
# usually to output some kind of final report, or do something with the # es usualmente para mostrar un reporte final, o hacer algo con el agregado de
# aggregate of the data you've accumulated over the course of the script. # los datos que has acumulado durante la ejecución del script.
END { END {
if (nlines) if (nlines)
print "The average age for " name " is " sum / nlines print "La edad promedio para " name " es " sum / nlines
} }
``` ```
Further Reading: Más información:
* [Awk tutorial](http://www.grymoire.com/Unix/Awk.html) * [Tutorial de AWK](http://www.grymoire.com/Unix/Awk.html)
* [Awk man page](https://linux.die.net/man/1/awk) * [Página man de AWK](https://linux.die.net/man/1/awk)
* [The GNU Awk User's Guide](https://www.gnu.org/software/gawk/manual/gawk.html) GNU Awk is found on most Linux systems. * [La guía del usuario de GNU Awk](https://www.gnu.org/software/gawk/manual/gawk.html)
GNU Awk se encuentra en la mayoría de los sistemas Linux.