Comment puis-je supprimer le texte d'une ligne après un certain caractère avec awk

12

Comment puis-je utiliser awk pour supprimer tout le texte après un certain caractère ";" qui apparaît sur chaque ligne de mon fichier texte? (J'ai ensuite besoin de courir pour les boucles sur le texte)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York
Jenny
la source
1
Veuillez nous montrer le fichier texte réel, le diable est dans les détails avec ce genre de chose.
terdon
J'ai donné un exemple maintenant @terdon
Jenny

Réponses:

18

Il existe deux approches générales.

  1. Définissez awkle séparateur de champ de ce caractère. Vous pouvez alors obtenir les pièces que vous souhaitez comme $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Utilisez gsub()pour le remplacer par une chaîne vide:

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

Donc, pour votre exemple:

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

Henry,Frank

Aaron,Kathryn,Caitlin,Harris
terdon
la source
4

Voici une réponse avec sed- puisque vous ne faites pas vraiment de traitement sur le terrain, awk est probablement exagéré.

sed 's/;.*//'
Chris Down
la source
1
+1 mais sur la base des commentaires du PO , je suppose que tout cela fait partie d'un script plus large. @Jenny, c'est le genre de détails que vous devriez inclure dans vos questions au fait.
terdon
4

Et aussi juste cut..

cut -d\; -f1 file
Scrutinisateur
la source
0

Parfois, vous pouvez remplacer tous les caractères après un certain mot par une autre chaîne. Par exemple:

original_string="abc blabla foo bar" et vous voulez remplacer les mots après blabla par "bonjour le monde"

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Kemin Zhou
la source