Encontre registros que contenham uma cadeia começando e terminando com certos caracteres

-4

Eu preciso de um comando (de preferência usando awk ) que lista o número de rolagem exclusivo e os nomes de todos os alunos cujos nomes começam com A e terminam com k da 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 
    
por lakshmi narayana 09.11.2013 / 06:44

2 respostas

4

Como você pediu 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ê poderia 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 comando sort -u

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


Pode ser mais correto usar âncoras de palavras em 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á tem espaço em branco separado).

    
por steeldriver 09.11.2013 / 14:50
1

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ê quiser remover a primeira coluna de números, use:

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

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

grep "A[a-z]*k" test | cut -d" " -f -3
    
por Radu Rădeanu 09.11.2013 / 07:06