separador print manejo con columnas campos archivos unix awk

unix - print - Cómo imprimir la quincuagésima columna de un archivo de texto con AWK usando argv



linux awk print (2)

awk ''{print $''$myvar''}'' < /tmp/in > /tmp/out

Donde $ myvar es su columna variable (un número entero). ¡Cuidado con las inyecciones de guiones!

Supongamos que tengo un archivo de texto con datos separados por espacios en blanco en columnas. Quiero escribir un script de shell que tome como entrada un nombre de archivo y un número N e imprima solo esa columna. Con awk puedo hacer lo siguiente:

awk < /tmp/in ''{print $2}'' > /tmp/out

Este código imprime la segunda columna.

Pero, ¿cómo se podría incluir eso en un script de shell para que se pueda pasar una columna arbitraria en argv?


awk -v x=2 ''{print $x}''

o en un script de shell:

#!/bin/sh num=$1 awk < /tmp/in -v x=$num ''{print $x}'' > /tmp/out