Filter Exigir Palavras maiúsculas de um arquivo (nem todas as palavras maiúsculas)

2

Eu quero a saída deste arquivo somente

AVDDPLL1V8
AGNDPLL1V8
DVDDPLL1V1
DGNDPLL1V1 

Por favor, ajude-me a encontrar soluções.

Aqui está minha entrada:

6.1.2 Power and Ground Pins
             The following table describes the power and ground pins for the PLL.


             Table 5: Power and Ground Pins
                  Pin Name                                                Description
                                    Analog power pin. This pin provides the power supply for the sensitive analog
                AVDDPLL1V8
                                    blocks of the PLL.
                                    Analog ground pin. This pin provides the ground for the sensitive analog blocks
                AGNDPLL1V8
                                    of the PLL.
                                    Digital power pin. This pin provides power supply for the digital circuits in the
                DVDDPLL1V1
                                    PLL.
                DGNDPLL1V1          Digital ground pin. This pin provides ground for the digital circuits in the PLL.
    
por yisha 29.08.2014 / 10:33

4 respostas

0
sed -n 's/^ *\([[:upper:]0-9]\{10,\}\).*//p'

Isso imprimirá a primeira palavra em uma linha se a palavra for composta por pelo menos 10 caracteres consecutivos que são apenas letras maiúsculas e / ou números. Nada mais é impresso.

Execute em seus dados de exemplo sua saída:

AVDDPLL1V8
AGNDPLL1V8
DVDDPLL1V1
DGNDPLL1V1
    
por 29.08.2014 / 22:50
2

Uma maneira de fazer isso:

$ awk '$1 ~ /^[[:upper:]]+[0-9]+/ {print $1}' file
AVDDPLL1V8
AGNDPLL1V8
DVDDPLL1V1
DGNDPLL1V1

Explicação

Verificamos somente o primeiro campo de cada linha, se começar com ^ um ou mais caracteres maiúsculos [[:upper:]]+ , seguido por um ou mais números [0-9]+ , basta imprimi-lo.

Com sua entrada, suponho que após caracteres maiúsculos haja um ou mais números.

    
por 29.08.2014 / 10:39
2

Experimente o comando abaixo grep para imprimir todos os caracteres alfanuméricos,

$ grep -oP '[A-Z0-9]*[A-Z][0-9][A-Z0-9]*' file
AVDDPLL1V8
AGNDPLL1V8
DVDDPLL1V1
DGNDPLL1V1
    
por 29.08.2014 / 12:04
1

Se o seu problema com as respostas existentes for que eles não encontram palavras que consistem apenas de letras maiúsculas (sem dígitos), então podemos adaptar a resposta do Gnouc assim:

awk '$1 ~ /^[[:upper:]0-9]+$/ {print $1}'

ou

awk '$1 ~ /^[[:upper:][:digit:]]+$/ {print $1}'

Isso difere da solução dele em

  • Colocando os dígitos ( [0-9] ou [:digit:] ) nos colchetes com as letras maiúsculas ( [:upper:] ), exigimos apenas que cada caractere de correspondência é uma letra maiúscula ou um dígito, onde a resposta atual do Gnouc exige pelo menos um de cada.
  • Ao adicionar o $ , garantimos que a primeira palavra inteira é composto de letras maiúsculas e / ou dígitos. Sem isso, The , Table , Pin e Analog corresponderiam porque eles começam com uma letra maiúscula.

Isso corresponderia a um número simples (por exemplo, 612 ) se é a primeira “palavra” (ou seja, a primeira seqüência de caracteres não-brancos) em uma linha. Para evitar isso, faça

awk '$1 ~ /^[[:upper:]][[:upper:]0-9]*$/ {print $1}'

ou

awk '$1 ~ /^[[:upper:]][[:upper:][:digit:]]*$/ {print $1}'

que exigem que a palavra inicie com uma letra.

    
por 29.08.2014 / 17:10