这应该是很多人的基本问题,但我是一名没有编程背景的生物学家,请原谅我的问题。
我想做的是将约100,000个已经存在代码名称的gzipped数据文件重命名(例如:XG453834.fasta.gz)。我想将它们命名为我可以轻松阅读和解析的内容(例如:Xanthomonas_galactus_str_453.fasta.gz)。
我尝试使用sed、rename和mmv,但都没有成功。如果我在一个单独的脚本上使用任何一个这些命令,那么它们就可以正常工作,只有当我尝试将变量合并到shell脚本中时才会遇到问题。我没有收到任何错误信息,只是没有更改任何名称,所以我认为这是一个I/O错误。
以下是我的文件样式:
我想做的是将约100,000个已经存在代码名称的gzipped数据文件重命名(例如:XG453834.fasta.gz)。我想将它们命名为我可以轻松阅读和解析的内容(例如:Xanthomonas_galactus_str_453.fasta.gz)。
我尝试使用sed、rename和mmv,但都没有成功。如果我在一个单独的脚本上使用任何一个这些命令,那么它们就可以正常工作,只有当我尝试将变量合并到shell脚本中时才会遇到问题。我没有收到任何错误信息,只是没有更改任何名称,所以我认为这是一个I/O错误。
以下是我的文件样式:
#! /bin/bash
# change a bunch of file names
file=names.txt
while IFS=' ' read -r r1 r2;
do
mmv ''$r1'.fasta.gz' ''$r2'.fasta.gz'
# or I tried many versions of: sed -i 's/"$r1"/"$r2"/' *.gz
# and I tried many versions of: rename -i 's/$r1/$r2/' *.gz
done < "$file"
这是我的文本文件的第一行,并使用单空格分隔符:
cat names.txt
#find #replace
code1 name1
code2 name2
code3 name3
我知道我可以用Python或Perl来完成这个任务,但是因为我现在只能在这个Bash脚本上工作,所以我希望找到一个简单的解决方法来修复它,并弄清楚我的错误在哪里。非常感谢任何可能提供的帮助。
此外,我尝试使用cat
命令读取names文件(请参见下面Ashoka Lella的评论),然后使用awk
命令移动/重命名一些文件的变量名称(始终以“code”开头),因此我正在寻找替换选项,只需将“code”替换为“name”并保留文件名结构。
我怀疑我没有在perl表达式的单引号中转义变量,但我已经阅读了很多手册,也找不到解决方法。