我需要根据名称将 12000 个填充物分为 1000 个组,并为每个组创建一个包含该组填充物的新文件夹。每个文件的名称以多列格式给出(带 _ 分隔符),其中第二列从 1 到 12(零件编号)变化,最后一列从 1 到 1000(系统编号),表明最初 1000 个不同的系统(最后一列)被拆分为 12 个独立的部分(第二列)。下面是一个基于 3 个系统的小子集的示例,该系统由 12 个部分组成,总共 36 个填充。
7000_01_lig_cne_1.dlg
7000_02_lig_cne_1.dlg
7000_03_lig_cne_1.dlg
...
7000_12_lig_cne_1.dlg
7000_01_lig_cne_2.dlg
7000_02_lig_cne_2.dlg
7000_03_lig_cne_2.dlg
...
7000_12_lig_cne_2.dlg
7000_01_lig_cne_3.dlg
7000_02_lig_cne_3.dlg
7000_03_lig_cne_3.dlg
...
7000_12_lig_cne_3.dlg
我需要根据它们名称的第二列 (01, 02, 03 .. 12) 对这些填充进行分组,从而创建 1000 个文件夹,这些文件夹应按以下方式为每个系统限制 12 个填充:
Folder1, name: 7000_lig_cne_1, it contains 12 filles: 7000_{this is from 01 to 12}_lig_cne_1.dlg
Folder2, name: 7000_lig_cne_2, it contains 12 filles 7000_{this is from 01 to 12}_lig_cne_2.dlg
...
Folder1000, name: 7000_lig_cne_1000, it contains 12 filles 7000_{this is from 01 to 12}_lig_cne_1000.dlg
假设所有 *.dlg 填充都存在于同一个目录中,我建议使用 bash 循环工作流,它只缺少一些排序功能(sed、awk ??),按以下方式组织:
#set the name of folder with all DLG
home=$PWD
FILES=${home}/all_DLG/7000_CNE
# set the name of protein and ligand library to analyse
experiment="7000_CNE"
#name of the output
output=${home}/sub_folders_to_analyse
#now here all magic comes
rm -r ${output}
mkdir ${output}
# sed sollution
for i in ${FILES}/*.dlg # define this better to suit your needs
do
n=$( <<<"$i" sed 's/.*[^0-9]\([0-9]*\)\.dlg$/\1/' )
# move the file to proper dir
mkdir -p ${output}/"${experiment}_lig$n"
cp "$i" ${output}/"${experiment}_lig$n"
done
!注意:在那里我将每个文件夹的名称表示为 ${experiment},我在最后添加了最后一列 $n 的编号。是否可以每次根据复制的填充名称自动设置新文件夹的名称?手动它可以通过跳过文件夹名称中的第二列来实现
cp ./all_DLG/7000_*_lig_cne_987.dlg ./output/7000_lig_cne_987
迭代文件。从文件名中提取目标目录名。移动文件。
for i in *.dlg; do
# extract last number with your favorite tool
n=$( <<<"$i" sed 's/.*[^0-9]\([0-9]*\)\.dlg$/\1/' )
# move the file to proper dir
echo mkdir -p "folder$n"
echo mv "$i" "folder$n"
done
笔记:
更新:对于 OP 的文件夹命名约定:
for i in *.dlg; do
foldername="$HOME/output/${i%%_*}_${i#*_*_}"
echo mkdir -p "$foldername"
echo mv "$i" "$foldername"
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句