首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历文件以查找字符串,并将包含该字符串的文件发送到bash中同名的目录。

循环遍历文件以查找字符串,并将包含该字符串的文件发送到bash中同名的目录。
EN

Stack Overflow用户
提问于 2019-10-05 20:33:19
回答 1查看 763关注 0票数 1

我有一个具有~500个文件的父目录,每个文件名都以cert开头,即cert-104.mol2cert-105.mol2等等。这些cert文件中的每一个都包含一个七个数字标识符,即7988114。有20个唯一的七个数字标识符。我已经创建了一个目录(unique_ligands),其中包含每个唯一标识符的目录,即一个名为7988114的目录。在每个目录中都有一个带有标识符名称的.mol2文件,即7988114.mol2。总之,文件结构如下所示:

代码语言:javascript
复制
/parent/unique_ligands/7988114/7988114.mol2

其中7988114是~20个唯一标识符之一。

在具有~500个文件的父目录中,我需要循环遍历每个cert文件,选择唯一的七个数字标识符,并将其发送到相应的identifier.mol2文件。作为一个开始抨击,我不知道如何处理这一点。我为单个标识符( 7988114 )编写了执行此过程的代码

代码语言:javascript
复制
find . -type f -name 'cert*' -exec grep -q '7988114' {} ';' -exec cp {} ./unique_ligands/7988114 ';'
cd unique_ligands/7988114
bash -c 'cat $(for((i=0;i<10000;i++)); do echo -n "cert-${i}.mol2 "; done) > zzz.txt 2> ./null'
mv zzz.txt 7988114.mol2
rm null
rm cert*

我如何将其转换为能够识别任意七个数字标识符的循环?或者有什么更好的方法来解决这个问题?

编辑

为了澄清我上面的示例代码中的每一行都做了什么:

find ...本行搜索以文件名cert开头的所有~500个文件,并选择其内容包含字符串7988114的文件,并将它们复制到正确的7988114目录中。每个cert文件包含大约100行分子坐标、电荷信息等等。

bash -c ...这一行遍历复制到7988114目录中的每个cert文件,并将文件内容添加到一个新的文本文件zzz.txt中。每个cert文件都被命名为cert-1.mol2cert-2.mol2等。对我来说,最关键的是,这一行搜索从1到10,000的上限的每个cert文件,并按顺序将它们添加到zzz.txt。我发现的其他示例要么没有按顺序进行搜索,要么在查看cert-1*文件之前遍历cert-2*文件。

由于某些原因,不允许我在上面创建一个mv zzz.txt 7988114.mol2文件,所以我在这里创建了它

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-08 20:47:04

这里有一个方法,我想出了如何回答我自己的问题(在上面用户的帮助和启发下--谢谢!)

代码语言:javascript
复制
ls -l | grep ^d | awk '{print $9}' > list_of_ligands.txt
mv list_of_ligands.txt ..

cd ..

while read NAME
do
        echo "$NAME"
        grep -l "$NAME" cert* | while read -r filename ; do
        cp $filename unique_ligands/$NAME
        cd unique_ligands/$NAME
        bash -c 'cat $(for((i=0;i<10000;i++)); do echo -n "cert-${i}.mol2 "; done) > zzz.txt 2> ./null'
        mv zzz.txt $NAME.mol2
        rm null
        rm cert*
        cd ../..
done
done < list_of_ligands.txt

正如我在最初的问题中提到的,我以前为每个7个数字标识符创建了一个目录。ls -l行选择目录名并创建目录名称的垂直列表(同样,目录名只是我拥有的每个7个数字标识符)。

两个while循环遍历我所拥有的每个7个数字标识符,并执行我在最初问题中提到的命令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58252116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档