我有一个包含 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
答案1
如果我们可以放心地假设所有名称都是唯一的,我的意思是只有一个文件的名称包含_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