Encuentre registros que contengan una cadena que comience y termine con ciertos caracteres

Encuentre registros que contengan una cadena que comience y termine con ciertos caracteres

Necesito un comando (preferiblemente usando awk) que enumere el número de lista único y los nombres de todos los estudiantes cuyos nombres comienzan Ay terminan con kde la siguiente lista:

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 

Respuesta1

Dado que solicitó específicamente una solución usando awk, suponiendo que el número de rollo y el nombre son el primer y segundo campo, podría usar

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

Si necesita registros únicos, la forma más sencilla es canalizar los resultados mediante el sort -ucomando

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


Quizás sea más correcto utilizaranclas de palabrasen lugar deanclajes de línea^, $ en la expresión regular, es decir

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

Ambos parecen funcionar en este contexto (posiblemente porque el campo ya está separado por espacios en blanco).

Respuesta2

Suponiendo que tienes esos registros en un archivo llamado data_file.txt, puedes usar:

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

Si desea eliminar la primera columna de números, utilice:

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

Si desea eliminar la última columna de números, utilice:

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

información relacionada