Come posso rimuovere il testo da una riga dopo un certo carattere con awk


12

Come posso usare awk per rimuovere tutto il testo dopo un certo carattere ";" che appare su ogni riga del mio file di testo? (Ho quindi bisogno di correre per i cicli sul testo)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Per favore, mostraci il file di testo attuale, il diavolo è nei dettagli con questo genere di cose.
terdon

Ho dato un esempio ora @terdon
Jenny,

Risposte:


18

Esistono due approcci generali.

  1. Imposta awkil separatore di campo su quel carattere. È quindi possibile ottenere le parti desiderate come $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Utilizzare gsub()per sostituirlo con una stringa vuota:

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

Quindi, per il tuo esempio:

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

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Ecco una risposta con sed- dal momento che non stai davvero eseguendo alcuna elaborazione sul campo, awk è probabilmente eccessivo.

sed 's/;.*//'

1
+1 ma in base ai commenti del PO , presumo che faccia tutto parte di uno script più ampio. @Jenny, questo è il tipo di dettaglio che dovresti includere nelle tue domande a proposito.
terdon


0

A volte potresti voler sostituire tutti i caratteri dopo una determinata parola con un'altra stringa. Per esempio:

original_string="abc blabla foo bar" e vuoi sostituire le parole dopo blabla con "ciao mondo"

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.