【问题标题】:Run terminal program on multiple input files在多个输入文件上运行终端程序
【发布时间】:2015-09-22 09:57:20
【问题描述】:

我有一个在终端中运行的 java 程序,它以 .txt 作为输入并写入 .txt 作为输出。我想在 100 个输入文件上运行这个程序。我怎样才能制作一个函数来获取我所有的输入文件并自动运行它们? 这是java程序:

java -jar miraligner.jar -freq -sub 1 -trim 3 -add 3 -s hsa -i IsomiR_235G.txt -db ./DB/ -o Miraligner_235G.txt 

这是输入文件的样子,它们仅在_.txt 之间的部分不同

IsomiR_94R.txt
IsomiR_100G.txt
...

【问题讨论】:

    标签: java python bash perl awk


    【解决方案1】:

    将它们放在一个名为inputs 的文件中并执行:

    $ cat inputs | head -n2 
    IsomiR_94R.txt
    IsomiR_100G.txt
    $ while read -r input; do
        [ -f "$input" ] && java -jar miraligner.jar -freq -sub 1 -trim 3 -add 3 -s hsa -i "$input" -db ./DB/ -o "Miralinger_${input#*_}" 
    done < inputs
    

    这将逐行读取文件inputs 并在每个输入文件上执行 脚本。请注意,它们可能不包含使该选项起作用的换行符。文件也应该用换行符分隔。

    【讨论】:

    • -o Miraligner_235G.txt 部分应该依赖于$input
    • 应该输入输入吗?
    • DMED7013:miraligner robinm$ while -r 读取输入; do [ -f "$input" ] && java -jar miraligner.jar -freq -sub 1 -trim 3 -add 3 -s hsa -i "$input" -db ./DB/ -o "Miraligner__${input# *_}" ; done
    • DMED7013:miraligner robinm$ ls DB input.txt miraligner.jar 后处理
    • 不,您将输入文件名放在一个名为 inputs 的文件中。
    【解决方案2】:

    作为替代方案,这将直接获取文件名,而无需创建中间文件:

    for f in IsomiR_*.txt
    do
        java -jar miraligner.jar -freq -sub 1 -trim 3 -add 3 -s hsa -i "$f" -db ./DB/ -o "Miraligner${f#IsomiR}" 
    done
    

    即使文件名包含空格、制表符或换行符,这也会起作用。

    【讨论】:

    • 是的,这可能更容易!好主意!
    • 对不起,@ShellFish 谢谢你的帮助,我学会了输入函数
    • @BioMan inputs 不是一个函数,它是 read 起作用的魔法。 -- 顺便说一句,无需道歉,这个网站是关于质量,而不是声誉。
    猜你喜欢
    • 2014-02-09
    • 2015-12-19
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多