Unix - 将目录中的文件名替换为同一目录中文件中的特定唯一前缀

Unix - 将目录中的文件名替换为同一目录中文件中的特定唯一前缀

我的目录中有数百个文件具有相同的后缀和独特的字母数字前缀,如下所示:

ABC01234.sorted_dup.bam

ABC04271.sorted_dup.bam

ABC09287.sorted_dup.bam

我有一个文件,其中一列包含新的唯一字母数字前缀,特定于每个原始前缀,如下所示:

GBH03987 ABC01234

GBH05430 ABC04271

GBH07651 ABC09287

我想用文件中的正确前缀替换原始前缀,即将目录中文件名中的前缀替换为第 1 列中的前缀。生成的文件名将具有基于第 1 列的前缀,如下所示:

GBH03987.sorted_dup.bam

GBH05430.sorted_dup.bam

GBH07651.sorted_dup.bam

对于 UNIX 新手来说,最简单的解决方案是什么?最好使用 awk 或 sed 解决方案,我们将非常感激。

答案1

对于这种情况,一个简单的 shell 循环就足够了:

while read -r new old; do 
  [ -f "$old.sorted_dup.bam" ] && echo mv -- "$old.sorted_dup.bam" "$new.sorted_dup.bam"
done < filenames

其中filenames是包含映射的文件的名称。测试后删除echo

相关内容