특정 문자로 시작하고 끝나는 문자열을 포함하는 레코드 찾기

특정 문자로 시작하고 끝나는 문자열을 포함하는 레코드 찾기

다음 목록에서 이름이 시작 하고 끝나는 awk모든 학생의 고유한 롤 번호와 이름을 나열하는 명령(가급적 사용)이 필요합니다 .Ak

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

관련 정보