У меня есть папка с 1000 файлами.
Их имя показано ниже
... P1_A1 _R2 ....
... P1_A2 _R2 ....
... P1_A3 _R2 ....
, где важна только середина, как выделено
, и у меня есть файл ключа .txt
в той же папке с этой информацией
Sample P R Col
1 1 A 1
2 1 A 2
3 1 A 3
Я хочу проверить файл .txt
и соответственно изменить имя файла или сохранить с именем в другой папке. например,
.._ P1_A1_ ..
должно быть sample1
, потому что, когда я смотрю на файл .txt
, это
Sample P R Col
1 1 A 1
для .._ P1_A2_ ..
должно быть sample2
, потому что когда я смотрю на файл .txt
, это
Sample P R Col
2 1 A 2
Если мы можем безопасно предположить, что все Ваши имена уникальны, я подразумеваю, что существует только один файл, имя которого содержит _P1_A1
, только один с _P1_A2
и т.д., можно сделать это:
$ awk 'NR>1{print "mv *_P"$2"_"$3$4"* sample"$1}' key.txt
mv *_P1_A1* sample1
mv *_P1_A2* sample2
mv *_P1_A3* sample3
Awk читает свой вход линию за линией и разделяет его на поля на пробеле. Таким образом, первое поле $1
, второе $2
и т.д. Здесь, мы обрабатываем файл ключей и печатаем корректное mv
команда путем создания его из полей файла.
, Если Вы уверены mv
, распечатанные команды корректны, можно выполнить их с:
awk 'NR>1{system("mv *_P"$2"_"$3$4"* sample"$1)}' key.txt