Imprime linhas se a coluna for iniciada com letra maiúscula

5

Eu tenho um arquivo como este:

ID  A56
DS  /A56
DS  AGE 56

E eu gostaria de imprimir a linha inteira somente se a segunda coluna começar com uma letra maiúscula.

Resultado esperado:

ID  A56
DS  AGE 56

O que eu tentei até agora:
awk '$2 ~ /[A-Z]/ {print $0}' file
Imprime tudo: letras maiúsculas são encontradas na segunda coluna.

awk '$2 /[A-Z]/' file
Obtém um erro de sintaxe.

    
por dovah 25.07.2014 / 13:02

2 respostas

5

Você pode usar awk como @cuonglm sugerido ou

  1. GNU grep

    grep -P '^[^\s]+\s+[A-Z]' file 
    
  2. Perl

    perl -lane 'print if $F[1]=~/^[A-Z]/' file
    
  3. GNU sed

    sed -rn '/^[^\s]+\s+[A-Z]/p' file 
    
  4. shell (assume uma versão recente do ksh93, zsh ou bash)

    while read -r a b; do 
        [[ $b =~ ^[A-Z] ]] && printf "%s %s\n" "$a" "$b"; 
    done < file 
    
por 25.07.2014 / 13:13
9

Você deve usar regex ^ para indicar o início da string:

$ awk '$2 ~ /^[[:upper:]]/' file
ID  A56
DS  AGE 56
    
por 25.07.2014 / 13:03

Tags