Cómo imprimir una gama de columnas usando el comando 'AWK'

Cómo imprimir una gama de columnas usando el comando 'AWK'
El comando 'AWK' es uno de los muchos comandos que se pueden usar para imprimir una gama de columnas de datos tabulares en Linux. El comando 'AWK' se puede usar directamente desde el terminal ejecutando el archivo de script 'AWK'. En este tutorial, le mostraremos cómo imprimir una gama de columnas de datos tabulares.

Ejemplo 1: imprima un rango de columnas desde una salida de comando

El siguiente comando imprimirá las columnas segunda, tercera y cuarta desde la salida del comando, 'ls -l'. Aquí, los números de columna se establecen explícitamente, pero en el siguiente ejemplo se muestra un comando más eficiente para imprimir el mismo rango de columnas.

$ ls -l | Awk 'imprimir $ 2, $ 3, $ 4'

La siguiente salida es producida por el comando anterior.

Ejemplo 2: imprima el rango de columnas desde un archivo utilizando un para bucle

Para seguir con este ejemplo y los otros ejemplos en este tutorial, cree un archivo de texto llamado marcas.TXT con el siguiente contenido:

ID CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

El siguiente comando 'AWK' imprimirá las primeras tres columnas de marcas.TXT. El para El bucle se usa para imprimir los valores de la columna, y el bucle incluye tres pasos. El NF La variable indica los números totales de campos o columnas del archivo.

$ Cat Marks.TXT
$ awk 'para (i = 1; i<=NF-1;i++) printf $i" "; print ""' marks.txt

La siguiente salida se producirá ejecutando el comando. La salida muestra al estudiante IDS y las marcas para CSE203 y CSE102.

Ejemplo 3: Imprima el rango de columnas definiendo variables de inicio y finalización

El siguiente comando 'AWK' imprimirá las primeras tres columnas desde la salida del comando 'ls -l' inicializando el a partir de y finalizando variables. Aquí, el valor del a partir de La variable es 1 y el valor del finalizando La variable es 3. Estas variables se iteran en un bucle for para imprimir los valores de la columna.

$ ls -l | Awk 'begin primero = 1; último = 3
para (i = primero; i < last; i++) printf("%s ", $i) print $last '

La siguiente salida aparecerá después de ejecutar el comando. La salida muestra los primeros tres valores de columna de la salida, 'ls -l'.

Ejemplo 4: Imprima una gama de columnas desde un archivo con formato

El siguiente comando 'AWK' imprimirá las primeras tres columnas de marcas.TXT usando printf y separador de campo de salida (De). Aquí, el bucle for incluye tres pasos, y se imprimirán tres columnas en secuencia desde el archivo. De se usa aquí para agregar espacio entre columnas. Cuando el valor de contador del bucle (i) es igual al finalizando variable, luego se genera una nueva línea (\ n).

$ Cat Marks.TXT
$ awk -v start = 1 -v end = 3 'for (i = start; i<=end;i++) printf("%s%s",
$ i, (i == end) ? "\ n": ofs) 'Marcas.TXT

La siguiente salida se generará después de ejecutar los comandos anteriores.

Ejemplo 5: Imprima el rango de columnas desde un archivo utilizando una declaración condicional

El siguiente comando 'AWK' imprimirá las primeras y últimas columnas desde un archivo usando un bucle for bucle y una instrucción if. Aquí, el bucle for incluye cuatro pasos. El a partir de y finalizando Las variables se usan en el script para omitir la segunda y tercera columnas del archivo utilizando la condición if. La variable OFS se usa para agregar espacio entre las columnas, y la variable ORS se usa para agregar una nueva línea (\ n) después de imprimir la última columna.

$ Cat Marks.TXT
$ awk -v start = 2 -v end = 3 'for (i = 1; i<=NF;i++)
if (i> = start && i<=end) continue;
else printf ("%s%s", $ i, (i!= Nf) ? OFS: ORS) 'Marcas.TXT

La siguiente salida aparecerá después de ejecutar los comandos anteriores. La salida muestra las primeras y últimas columnas de marcas.TXT.

Ejemplo 6: imprima el rango de columnas desde un archivo utilizando la variable NF

El siguiente comando 'AWK' imprimirá las primeras y últimas columnas del archivo utilizando una variable NF. No se utilizan bucles o declaraciones condicionales para imprimir los valores de la columna. NF indica el número de campos. Hay cuatro columnas en las marcas.TXT. $ (NF-3) define la primera columna, y $ NF indica la última columna.

$ Cat Marks.TXT
$ awk 'imprimir $ (nf-3) "" $ nf' marcas.TXT

La siguiente salida se produce ejecutando los comandos anteriores. La salida muestra las primeras y últimas columnas de marcas.TXT.

Ejemplo 7: Imprima el rango de columnas desde un archivo usando subStr () e index ()

La función index () devuelve una posición si el segundo valor de argumento existe en el primer valor de argumento. La función subStr () puede tomar tres argumentos. El primer argumento es un valor de cadena, el segundo argumento es la posición inicial, y el tercer argumento es la longitud. El tercer argumento de subStr () se omite en el siguiente comando. Debido a que la columna comienza desde $ 1 en el comando 'AWK', la función index () devolverá $ 3 y el comando imprimirá de $ 3 a $ 4.

$ Cat Marks.TXT
$ AWK 'imprima sustr ($ 0, índice ($ 0, $ 3))' Marcas.TXT

La siguiente salida se producirá ejecutando los comandos anteriores.

Ejemplo 8: Imprima secuencialmente un rango de columnas desde un archivo usando printf

El siguiente comando 'AWK' imprimirá la primera, segunda y tercera columna de marcas.txt estableciendo suficiente espacio para 10 caracteres.

$ Cat Marks.TXT
$ awk '// printf " %10s %10s %10s \ n", $ 1, $ 3, $ 2' Marcas.TXT

La siguiente salida se producirá ejecutando los comandos anteriores.

Conclusión

Hay varias formas de imprimir el rango de columnas desde la salida del comando o un archivo. Este tutorial muestra cómo el comando 'AWK' puede ayudar a los usuarios de Linux a imprimir contenido de datos tabulares.