Assumindo que seu arquivo é delimitado por tabulação (tsv)
cut -f 2 abcd.txt | egrep '[13579]$'
deve fazer o truque.
Se você estiver trabalhando com diferentes delimitadores ou mesmo com largura fixa, consulte man cut (especificamente, as opções -d e -c )
Bônus: adicione | uniq para remover duplicatas
edit: omita a parte cut se não quiser remover os endereços IP: egrep '[13579]$' abcd.txt
edit: adicione algumas explicações
cut é um utilitário que opera linha por linha e permite selecionar quais partes da linha você deseja gerar.
Você pode especificar isso por posição de caractere com a opção -c (útil com campos de comprimento fixo) ou por campo com o -f (se seus dados forem separados por campos).
Se você usa -f , o delimitador de campo é assumido como sendo o caractere, ou você pode especificar um diferente com -d .
echo -e 'abcdefghij\nabcdefghij' # two lines
echo -e 'abcdefghij\nabcdefghij' | cut -c 2-4,7 # selects characters from position 2 to 4 and 7
echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' # space-delimited fields
echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' | cut -d , -f 3 # prints only the 3rd field
egrep (que é o mesmo que grep -e ) seleciona linhas que correspondem à expressão regular dada . A expressão [13579]$ significa que tem um dígito ímpar no final da linha , então egrep mostra apenas a linha que termina em dígitos ímpares.
Expressões regulares são super engenhosas e úteis ao manipular texto, e assim você as encontrará em muitos utilitários de linha de comando, editores de texto e linguagens de programação - elas podem parecer enigmáticas no início, mas não precisam ser um especialista para a maioria das tarefas e se você ler um pouco sobre o tópico (e experimentar!), você vai rapidamente entender a essência dele.
edit: substituiu (1|3|5|7|9)$ por [13579]$ de acordo com a sugestão @HaukeLaging