【问题标题】:Concatenating many similar files连接许多相似的文件
【发布时间】:2014-08-02 09:55:26
【问题描述】:

如果我有一堆文件标记如下:

fasta_Watson_0
fasta_Watson_1
fasta_Watson_2
...
fasta_Watson_190

如何编写一个 awk 脚本来自动将所有文件连接成一个文件?

手写输入:

cat fasta_Watson_0 fasta_Watson_1 ...

实在是太乏味了!

【问题讨论】:

    标签: unix cat


    【解决方案1】:

    您可以使用bash wildcards,但您必须担心排序顺序。可能会做类似this post 上建议的事情。

    cat `ls fasta_Watson_* |sort -n -t "_" -k 3`
    

    【讨论】:

    • 仅当全局排序顺序为他提供他想要的文件顺序时才为真。这可能是也可能不是。他的示例中给出的文件绝对不是这种情况,因为它们将排序0, 1, 10, 11, ..., 2, 20, ..., 3, etc
    • 为什么要将ls 加入其中,而不仅仅是echo?还有为什么 subshel​​l 和 cat?
    • 虽然这里确实没有必要,但 Linux 上的 ls -v (GNU ls) 会按所需顺序列出文件。该解决方案不是可移植的; ls -v 在 Mac OS X 上有不同的含义(根据 POSIX,没有指定含义)。
    【解决方案2】:

    cat他们都按数字顺序并将结果保存在一个名为output的文件中,使用:

    cat fasta_Watson_{0..190} >output
    

    {0..190} 构造是一个代表从 0 到 190 的所有数字的 bashism。如果您的 shell 不支持,您可以使用标准实用程序 seq

    cat $(seq -f 'fasta_Watson_%g' 0 190) > output
    

    【讨论】:

    • 或使用cat $(seq -f 'fasta_Watson_%g' 0 190) > output,它使用seq-f 选项来显式生成名称,而无需shell 循环(节省cat 的执行次数)。这个答案(和我的变体)取决于文件的数量是否足够小,以至于列表不会超出对命令的参数列表长度的限制。
    • @JonathanLeffler 很好的建议。谢谢。
    猜你喜欢
    • 2020-09-17
    • 2022-06-23
    • 2014-03-23
    • 2021-10-17
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多