Como posso remover o texto de uma linha após um determinado caractere com awk

12

Como posso usar o awk para remover todo o texto após um determinado caractere ";" que aparece em todas as linhas do meu arquivo de texto? (Em seguida, preciso executar loops no texto)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York
Jenny
fonte
1
Por favor, mostre-nos o arquivo de texto real, o diabo está nos detalhes com esse tipo de coisa.
terdon
Eu dei um exemplo agora @terdon
Jenny

Respostas:

18

Existem duas abordagens gerais.

  1. Defina awko separador de campos para esse caractere. Você pode obter as peças que deseja como $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
  2. Use gsub()para substituí-lo por uma string vazia:

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

Então, para o seu exemplo:

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

Henry,Frank

Aaron,Kathryn,Caitlin,Harris
terdon
fonte
4

Aqui está uma resposta sed: como você realmente não está processando em campo, o awk provavelmente é um exagero.

sed 's/;.*//'
Chris Down
fonte
1
+1, mas com base nos comentários do OP , presumo que tudo isso faça parte de um script maior. @ Jenny, esse é o tipo de detalhe que você deve incluir nas perguntas a propósito.
terdon
4

E também apenas cut..

cut -d\; -f1 file
Scrutinizer
fonte
0

Às vezes, você pode substituir todos os caracteres após uma determinada palavra por outra sequência. Por exemplo:

original_string="abc blabla foo bar" e você deseja substituir as palavras após blabla por 'olá mundo'

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