В оболочке, если у вас установлен Perl rename
(иногда называемый prename
):
rename -v 's/$/.bad/' *
Если у вас слишком много файлов для shell *
glob, чтобы обработать их все, вы можете смешать их с помощью find
следующим образом (также замените +
на \;
, если необходимо):
find . -maxdepth 1 -exec rename -v 's/$/.bad/' {} +
Для Perl просто используйте move
из стандартного модуля:
use File::Copy;
for (<*>) { move($_, "$_.bad"); }
Посылка :это скорее доказательство концепции, чем реальное решение, позиционирующее себя где-то между неэлегантным и совершенно уродливым.
Ваши требования мне не совсем понятны, поэтому вот мои предположения:
В этом коде (замените два вхождения your_file
фактическим именем файла):
grep -f \
<(sort -k 1b,1b -k 3n,3n -k 4n,4n your_file |
nl -n rz -w 9 |
cut -f 1,2,4,5 |
uniq -f 1 -c |
grep '^[[:space:]]*1' |
sed 's/\(^[[:space:]]*1[[:space:]]*\)\(.*\)/^\2/' |
cut -f 1) \
<(sort -k 1b,1b -k 3n,3n -k 4n,4n your_file |
nl -n rz -w 9) |
sed 's/\(^[0-9]\+[[:space:]]*\)\(.*\)/\2/'
cut
извлекает только поля дерева, которые вы хотите сравнить, плюс первое (номер строки ). uniq
подсчитывает дубликаты для каждой результирующей строки, игнорируя первое поле (номер строки ), и добавляет счетчик к началу каждой строки. grep
выбирает только те строки, количество которых равно 1. sed
удаляет счетчик с начала каждой результирующей строки. cut
извлекает только первое поле, т.е.номер строки (таким образом проще, чем избегать предыдущего sed
и пытатьсяcut -f 2
). grep
использует результирующий набор номеров строк для фильтрации начального набора пронумерованных строк. sed
удаляет номер первой строки из отфильтрованного набора строк. Используя 14 строк вашего вопроса в качестве входных данных, он дает:
NZ_CP020102 B4U62_RS00155 30317 31869 16S ribosomal RNA NCIB3610a
NZ_CP020102 TESTGENOMECL_31 30317 31870 16S ribosomal RNA TESTGENOME
Примечания:
Вы можете использовать export LC_ALL=C
перед запуском этого кода, чтобы избежать проблем при сортировке некоторых символов.
Протестировано в Linux с помощью bash
и инструментов GNU.