Я предполагаю, что файл имеет формат «простой CSV», то есть в данных нет встроенных запятых или встроенных новых строк.
$ tac file | awk -F, '{ key = $0; sub("[^,]*,", "", key) } !seen[key]++' | tac
2,ed23,jon,doe,director,usa
4,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india
Код awk
в середине приведенного выше конвейера создаст строку, используемую в качестве ключа в хэше, из всех полей каждой строки, кроме первого. Он напечатает первое вхождение строки с определенным ключом и проигнорирует все дубликаты.
Поскольку вы, похоже, хотите получить последний дубликат, я изменю порядок строк во входных данных сtac
(из GNU coreutils ), прежде чем передать их в программу awk
. Затем я обращаю вывод программы awk
.
Недостаток этого подхода состоит в том, что вычисляемые ключи будут использовать столько памяти, сколько суммарный размер всех уникальных строк за вычетом первого поля.
Следующий подход является -более эффективным с точки зрения памяти, но он предполагает, что ввод сортируется таким образом, что повторяющиеся строки всегда встречаются вместе:
$ tac file | awk -F, '{ key = $0; sub("[^,]*,", "", key) } key != prev; { prev = key }' | tac
2,ed23,jon,doe,director,usa
4,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india
Отлично работает здесь (Fedora 34 ). Запустите ping 8.8.8.8
на одной вкладке моего терминала Gnome, на другой:
$ pgrep ping
295323
$ ps -ef | grep 295323
user 295323 3772 0 18:50 pts/4 00:00:00 ping 8.8.8.8
user 295628 3726 0 18:53 pts/3 00:00:00 grep --color=auto 295323
Вы уверены, что не неправильно скопировали PID (примерно в половине случаев )? ping
все еще работает (, он останавливается, если не находит цель, например )?