首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为文件上下文的csplit前缀

作为文件上下文的csplit前缀
EN

Stack Overflow用户
提问于 2016-07-28 11:55:21
回答 2查看 783关注 0票数 1

我写了一个bash脚本来分割一个文件。该文件如下所示:

代码语言:javascript
复制
@<TRIPOS>MOLECULE
ZINC32514653
....
....

@<TRIPOS>MOLECULE
ZINC982347645
....
....

下面是我写的剧本:

代码语言:javascript
复制
#!/bin/bash
#split the file into files named xx##.mol2
csplit -b %d.mol2 ./Zincpharmer_ligprep_1.mol2 '/@<TRIPOS>MOLECULE/' '{*}'
#rename all files called xx##.mol2 by their 2nd line which is ZINC######
for filename in ./xx*.mol2; 
do
    newFilename=$(echo $filename | sed -n 2p $filename)
    if [ ! -e "./$newFilename.mol2" ]; then
    mv -i $filename ./$newFilename.mol2

    else
        num=2
        while [ -e "./"$newFilename"_$num.mol2" ]; do
        num=$((num+1))  
        done
        mv $filename "./"$newFilename"_$num.mol2"
    fi
    done

我有两个问题:

( 1)是否有方法将前缀选项包括在csplit中,并告诉csplit前缀是分隔符后面的行。

2) xx00创建的第一行是一个空文件,因为分隔符位于第一行。我怎么才能避免这种情况?

预期的输出将是名为ZINC32514653.mol2和ZINC982347645.mol2的文件。A以防万一有两个条目具有相同的ZINC### ZINC982347645_2.mol2。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 12:01:45

您只需知道是否可以从这个man csplit页面获得:-

告诉csplit更改前缀:-

代码语言:javascript
复制
-f, --prefix=PREFIX
       use PREFIX instead of 'xx'

若要排除空文件:-

代码语言:javascript
复制
-z, --elide-empty-files
       remove empty output files
票数 0
EN

Stack Overflow用户

发布于 2016-07-28 13:02:59

这不能用csplit来完成。我推荐一些大致如下的内容:

代码语言:javascript
复制
awk  '/@<TRIPOS>MOLECULE/ { getline file; next } {print $0 > file }'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38635647

复制
相关文章

相似问题

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