我需要一个命令(最好使用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
答案1
由于您专门要求使用 的解决方案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}' ...
两者似乎都在这种情况下起作用(可能是因为该字段已经用空格分隔)。
答案2
假设您在名为的文件中拥有这些记录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