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

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

4

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

sed 's/;.*//'

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


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/'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.