Imprime uma string se o último caractere for ímpar

4

Eu tenho uma lista de nomes de host em um arquivo e quero separá-los com base no último caractere. Escreva o nome do host para um arquivo se o último caractere for um número ímpar. Como posso fazer isso em um forro?

Exemplo:

abc123
abc124
abc348
abc435

Saída desejada:

abc123
abc435
    
por MO12 22.03.2018 / 06:10

3 respostas

12

Comando awk curto:

awk '/[13579]$/' file > hostnames_odd.txt
  • [13579] - classe de caractere representando a lista de dígitos permitidos (números ímpares)
  • $ - o final da string / linha

Resultado:

$ cat hostnames_odd.txt 
abc123
abc435

Ou o mesmo com grep :

grep '[13579]$' file  > hostnames_odd.txt

No caso, se houver espaço (s) no final de algumas linhas, altere o padrão crucial para o seguinte: [13579][[:space:]]*$

    
por 22.03.2018 / 06:40
4

Um truque complicado aqui: apenas defina o separador de campo como uma string vazia , para que cada caractere seja um campo . Dessa forma, você só precisa verificar se $NF é par ou ímpar:

$ awk -F "" '$NF % 2' file
abc123
abc435

Com outros dados:

$ echo "23
... 24
... 25" | awk -F "" '$NF % 2'
23
25
    
por 22.03.2018 / 11:48
2

Isso imprimirá as linhas lidas se o último caractere mod 2 não for zero.

perl -wlne 'print $_ if ((substr $_, -1) % 2)' /path/to/file

    
por 22.03.2018 / 07:11