¿Cómo puedo eliminar el texto de una línea después de cierto carácter con awk


12

¿Cómo puedo usar awk para eliminar todo el texto después de cierto carácter ";" que aparece en cada línea de mi archivo de texto? (Entonces necesito ejecutar bucles en el texto)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Muéstranos el archivo de texto real, el diablo está en los detalles con este tipo de cosas.
terdon

Di un ejemplo ahora @terdon
Jenny

Respuestas:


18

Hay dos enfoques generales.

  1. Establezca awkel separador de campo a ese carácter. Luego puede obtener las piezas que desee como $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Use gsub()para sustituirlo con una cadena vacía:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy

Entonces, para su ejemplo:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Aquí hay una respuesta con sed: dado que realmente no está haciendo ningún procesamiento de campo, awk probablemente sea excesivo.

sed 's/;.*//'

1
+1, pero según los comentarios del OP , supongo que todo esto es parte de un script más grande. @ Jenny, ese es el tipo de detalle que debes incluir en tus preguntas por cierto.
terdon


0

A veces es posible que desee reemplazar todos los caracteres después de una determinada palabra con otra cadena. Por ejemplo:

original_string="abc blabla foo bar" y quieres reemplazar palabras después de blabla con 'hola mundo'

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.