Encontre registros que contenham uma string começando e terminando com determinados caracteres

Encontre registros que contenham uma string começando e terminando com determinados caracteres

Preciso de um comando (de preferência usando awk) que liste o número exclusivo da lista e os nomes de todos os alunos cujos nomes começam Ae terminam com kna lista a seguir:

001 Abhishek Physics 90
002 Rohan Maths 100
003 simashree Chemistry 89
002 Rohan Language 80
005 Vamsi Computers 99
001 Abhishek Maths 95
006 Surjya Computers 93 

Responder1

Como você solicitou especificamente uma solução usando awk, assumindo que o número e o nome do rolo são o primeiro e o segundo campos, você pode usar

awk '$2 ~ /^A[[:alpha:]]*k$/ {print $1,$2}' yourfile

Se você precisar de registros exclusivos, a maneira mais fácil é canalizar os resultados por meio do sort -ucomando

awk '$2 ~ /^[[:alpha:]]*k$/ {print $1,$2}' yourfile | sort -u


Talvez seja mais correto usarâncoras de palavrasem vez deâncoras de linha^, $ na expressão regular, ou seja

awk '$2 ~ /\<[[:alpha:]]*k\>/ {print $1,$2}' ...

Ambos parecem funcionar neste contexto (possivelmente porque o campo já está separado por espaços em branco).

Responder2

Supondo que você tenha esses registros em um arquivo chamado data_file.txt, você pode usar:

grep "A[a-z]*k" data_file.txt

Se você deseja remover a primeira coluna de números, use:

grep "A[a-z]*k" test | cut -d" " -f 2-

Se você deseja remover a última coluna de números, use:

grep "A[a-z]*k" test | cut -d" " -f -3

informação relacionada