问题描述
2016001.fas
2016002.fas
2016003.fas
...
2016001 L.innocua001
2016002 L.innocua002
2016003 L.monocytogenes001
...
也许在循环中使用一行或在bash中使用管道。
请注意,如果需要,我还可以使用.csv或逗号分隔的.txt格式列出实际和新文件名的列表。感谢您的帮助。
解决方法
xargs -a renames.txt -n 2 sh -c 'echo mv -- "$1.fas" "$2.fas"' _
-
xargs -a renames.txt
:将renames.txt
的内容作为命令的参数进行处理。 -
-n 2
:一次选择2个参数。 -
sh -c
:命令是运行嵌入式Shell - 内联外壳
'echo mv -- "$1.fas" "$2.fas"'
:使用xargs提供的参数1和2执行实际的重命名。
# remove echo when output matches the intent
echo mv -- "$1.fas" "$2.fas"
仅使用shell读取renames.txt
并执行重命名的方法:
while read -r a b; do
# Remove echo if satisfied by the output
echo mv -- "$a.fas" "$b.fas"
done <renames.txt
使用awk的替代方法,使用重命名命令将renames.txt
文件转换为shell脚本:
awk '{print "mv -- "$1".fas "$2".fas"}' renames.txt
一旦对上面的awk的输出感到满意;保存到Shell脚本文件中,或直接通过管道传递到sh。