1 votos

escriba un número de cadenas usando awk

Tengo los datos en el texto de 4 columnas, pero la última columna es la de un texto (contiene la variable de cuerdas) como se muestra a continuación

Column1 Column2 Column3 Column4
5678    567     56      hello
1234    123     12      hello there

Quiero escribir o mostrar sólo la 4ª columna usando awkcomo: awk '{print $4}' pero column4 sólo muestra la primera cadena. ¿Cómo puedo ser capaz de mostrar texto usando awk o cualquier otro formato de comando.

Gracias.

0voto

John N Puntos 181

Creo que la forma más sencilla es probablemente una mezcla de tr (para asegurar que sólo hay un espacio entre cada columna) y cut a agarrar el 4º y siguientes columnas:

$ cat test.txt | tr -s ' ' | cut -f 4- -d ' '
Column4
hello
hello there

Si estás seguro de que todas las columnas están alineados, con espacios (no fichas), entonces este es más corto:

$ cut -c 25- < test.txt
Column4
hello
hello there

Y la obligatoriedad awk solución:

$ awk '{ $1=$2=$3=""; print $0 }' < test.txt
   Column4
   hello
   hello there

Nota: los espacios en blanco al principio de cada línea de salida, en comparación a los dos anteriores soluciones.

0voto

Nick Sillito Puntos 326

La columna 4 es llegar divide cuando se utiliza {print $4} porque awk interpreta y en el espacio (por ejemplo, entre "hola" y "no") como delimitador, y en este ejemplo el "no" sería en el campo 5.

Dependiendo de exactamente cómo su archivo está formateado, hay un número de posibles respuestas (algunas más fáciles que otras).

Si todas las columnas están separadas por un carácter de tabulación único, el uso de

awk -F \t '{print $4}' (-F aquí se establece la presentada separador a una sola ficha)

Si todas las columnas son separador por uno o más caracteres de tabulación, el uso de

awk -F '[\t]+' '{print $4}' (-F aquí se establece el separador de campo a una o más pestañas)

Si el primero columnas son siempre un número fijo de caracteres (por ejemplo, 20), a continuación, utilizar

awk '{print substr($0, 21)}'

(substr comando simplemente imprime la entrada de lima, desde el 21 de caracteres hasta el final)

o, si ninguna de las anteriores

awk '{for (i=4; i<=NF; i++) printf "%s ", $i print ""}'

(este bucle imprime todos los campos, desde el cuarto hasta el final de la línea)

0voto

Nick Sillito Puntos 326

Si el formato de su archivo de entrada es que cada columna está separado por dos o más espacios, y una entrada válida en la columna 4, nunca tendrá más de un espacio en una fila, usted podría utilizar la siguiente solución, donde el separador de campo se establece en dos o más espacios.

awk -F " [ ]+" '{print $4}'

Ejemplo de salida:

hello hello there

(Observe que el encabezado "Column4" fue rechazado debido a que sólo hay un espacio entre cada uno de los títulos)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: