Como listar apenas números ímpares do arquivo de texto? [fechadas]

0

Eu tenho um arquivo com 2 colunas no linux 1ª coluna tem o endereço IP A segunda coluna tem o número da porta

Eu quero listar apenas os números de porta ímpares com endereços IP

    
por Ramadevi Palagani 20.01.2018 / 07:00

2 respostas

2

Abaixo de awk one liner você obterá o resultado com apenas um comando:

awk '$2%2!=0 {print $0}'  file.txt

Como você precisa exibir os números de porta ímpares com seus respectivos endereços IP, basta dividir o número da coluna 2 por 2; se o resultado não for igual a zero, imprima a linha.

    
por 20.01.2018 / 10:46
1

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

    
por 20.01.2018 / 07:45