我对 Ubuntu 和编码还不熟悉,但必须使用它来对分子测序数据进行一些分析,但我遇到了困难!
我最近将我的笔记本电脑换成了一台功能更强大的 PC(两者都安装了虚拟机),我的部分脚本现在不再起作用了。
我用来将一个文件(Map.txt)拆分为单个文件,然后重命名每个文件,最后将原始文件中的标题行添加到每个单个文件的代码是:
$ tail -n +2 Map.txt | split -l 1
$ awk '{cmd="echo " $0 ">" $1; system(cmd)}' x*
$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv –f tmp $file; done
每个命令都单独运行,但现在我收到一条错误消息:
mv: target 'NC2B7' is not a directory
当我运行上面的第三个命令 ($ for file in etc)。我不确定为什么这个命令突然不起作用,我之前在笔记本电脑上使用旧的 Oracle VM VirtualBox,现在使用 Oracle VM VirtualBox v5.2.18 和 ubuntu 16.04 来运行 QIIME。
有人能告诉我造成这种情况的原因是什么以及/或第三个命令现在应该是什么吗?
答案1
改变
$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv –f tmp $file; done
到
$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv -f tmp $file; done
区别不太明显,但您在命令中使用了长破折号,而不是mv
-command、-f
-option 中的普通破折号。我测试过了,确实有效。
为了防止文件名包含空格,您应该添加一些双引号:
$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat "$file" >> tmp; mv -f tmp "$file"; done
您还可以将整个命令简化为
$ for file in N*; do head -1 Map.txt > tmp; cat "$file" >> tmp; mv -f tmp "$file";
这是@PerlDuck 建议的。当然,我在将此建议添加到此答案之前对其进行了测试。