Мне нужна команда (предпочтительно с использованием awk
), которая перечисляет уникальный номер броска и имена всех студентов, чьи имена начинаются с A
и заканчиваются k
из следующего списка:
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
Предполагая, что у вас есть эти записи в файле с именем data_file.txt
, вы можете использовать:
grep "A[a-z]*k" data_file.txt
Если вы хотите удалить первый столбец чисел, используйте:
grep "A[a-z]*k" test | cut -d" " -f 2-
Если вы хотите удалить последний столбец чисел, используйте:
grep "A[a-z]*k" test | cut -d" " -f -3
Поскольку вы специально запросили решение с использованием awk
, то, предполагая, что номер и имя броска являются первым и вторым полями, вы можете использовать
awk '$2 ~ /^A[[:alpha:]]*k$/ {print $1,$2}' yourfile
Если вам нужно уникальные записи, самый простой способ - передать результаты через команду sort -u
awk '$2 ~ /^[[:alpha:]]*k$/ {print $1,$2}' yourfile | sort -u
Может быть правильнее использовать якоря слов вместо якоря строки ^, $ в регулярном выражении, т.е.
awk '$2 ~ /\<[[:alpha:]]*k\>/ {print $1,$2}' ...
Кажется, что оба работают в этом контексте (возможно, потому что поле уже разделено пробелами).