¿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
Jenny
fuente
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
terdon
fuente
4

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

sed 's/;.*//'
Chris Down
fuente
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
4

Y también solo cut...

cut -d\; -f1 file
Escrutador
fuente
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/'
Kemin Zhou
fuente