Como posso remover o texto de uma linha depois de um certo caractere com o awk

8

Como posso usar o awk para remover todo o texto depois de um determinado caractere ";" que aparece em todas as linhas do meu arquivo de texto? (Eu preciso então executar loops no texto)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York
    
por Jenny 28.02.2014 / 04:47

4 respostas

15

Existem duas abordagens gerais.

  1. Defina o separador de campo awk para esse caractere. Você pode então obter as partes 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
    
por 28.02.2014 / 05:00
4

E também apenas cut ..

cut -d\; -f1 file
    
por 28.02.2014 / 06:38
3

Aqui está uma resposta com sed - como você não está realmente fazendo nenhum processamento de campo, o awk é provavelmente um exagero.

sed 's/;.*//'
    
por 28.02.2014 / 05:10
0

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

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

echo $original_string | sed -E 's/(.+ blabla) .+/ hello world/'
    
por 30.08.2016 / 23:30