Sólo imprimir líneas en el segundo campo coincide con algunos de los criterios de

He

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

Necesito awk para imprimir todas las líneas en las que se $2 es LINUX.

InformationsquelleAutor yael | 2010-06-02

5 Kommentare

  1. 71

    En awk:

    awk '$2 == "LINUX" { print $0 }' test.txt

    Ver awk por Ejemplo para una buena introducción a awk.

    En sed:

    sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt

    Ver sed por Ejemplo para una buena introducción a sed.

    • ¿qué acerca de LINUX puede ser linux o Linux ?
    • Las páginas que enlaza a explicar acerca de cómo utilizar expresiones regulares en las herramientas respectivas. La expresión regular para que coincida con LINUX o Linux es L(LLEGADA|llegada) (a grandes rasgos; las diferentes herramientas que tienen a veces ligeramente diferente de la sintaxis). Por CIERTO, si esta es la tarea, debe ser marcados como tal.
    • Si desea que el juego sea completamente insensible a mayúsculas-minúsculas, retirar el toupper (o tolower) funciones en awk.
    • Tenga en cuenta que la acción por defecto ya es print $0, así que esto es todo lo que se requiere: awk 'toupper($2)=="LINUX"' test.txt
  2. 11

    Este es un caso en el que puede utilizar el hermoso idiomáticas awk:

    awk '$2=="LINUX"' file

    Que es:

    • La acción predeterminada de awk cuando en una Verdadera condición para la impresión de la línea actual.
    • Desde $2 == "LINUX" es cierto siempre que el 2º campo es LINUX, este se imprime las líneas en las que esto sucede.

    En caso de que desea imprimir todas las líneas de coincidencia LINUX no importa si está en mayúsculas o minúsculas, uso toupper() para sacar provecho de todos ellos:

    awk 'toupper($2)=="LINUX"' file

    O IGNORECASE con cualquiera de estos syntaxs:

    awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
    awk -v IGNORECASE=1 '$2=="LINUX"' file
  3. 4

    Trate estos:

    egrep -i '^\w+ LINUX ' myfile
    
    awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile
    
    sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile

    edición: modificado para el caso de insensibilidad

    • La pregunta menciona explícitamente awk (y sed en un comentario).
    • ¿qué acerca de LINUX puede ser linux o Linux ?
  4. 3

    En GNU sed insensible a mayúsculas-los partidos se pueden realizar con el I modificador:

    sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'

    Se firmeza partido «linux», «Linux», «LINUX», «LiNuX», y otros como el segundo campo (después de que el primer campo que puede ser cualquier no carácter de espacio en blanco) y rodeado por cualquier cantidad (al menos uno) de cualquier espacio en blanco (principalmente de espacio y la ficha, aunque se pueden usar [:blank:] limitar estrictamente los).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea