Ich brauche einen Befehl (vorzugsweise mit awk
), der die eindeutigen Matrikelnummern und Namen aller Studenten auflistet, deren Name mit beginnt A
und mit endet, k
aus der folgenden Liste:
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
Antwort1
Da Sie ausdrücklich nach einer Lösung mit gefragt haben awk
, könnten Sie unter der Annahme, dass Matrikelnummer und Name das erste und zweite Feld sind, verwenden
awk '$2 ~ /^A[[:alpha:]]*k$/ {print $1,$2}' yourfile
Wenn Sie eindeutige Datensätze benötigen, ist es am einfachsten, die Ergebnisse durch den sort -u
Befehl zu leiten
awk '$2 ~ /^[[:alpha:]]*k$/ {print $1,$2}' yourfile | sort -u
Richtiger wäre vielleicht,WortankeranstattLeinenanker^, $ im regulären Ausdruck, d. h.
awk '$2 ~ /\<[[:alpha:]]*k\>/ {print $1,$2}' ...
Beide scheinen in diesem Kontext zu funktionieren (möglicherweise, weil das Feld bereits durch Leerzeichen getrennt ist).
Antwort2
Vorausgesetzt, Sie haben diese Datensätze in einer Datei mit dem Namen data_file.txt
, können Sie Folgendes verwenden:
grep "A[a-z]*k" data_file.txt
Wenn Sie die erste Zahlenspalte entfernen möchten, verwenden Sie:
grep "A[a-z]*k" test | cut -d" " -f 2-
Wenn Sie die letzte Zahlenspalte entfernen möchten, verwenden Sie:
grep "A[a-z]*k" test | cut -d" " -f -3