在多个输入文件上运行终端程序

时间:2015-07-04 22:59:17

标签: java python bash perl awk

我有一个在终端中运行的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
...

2 个答案:

答案 0 :(得分:4)

将它们放在名为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并在每个输入文件上执行脚本。请注意,它们可能不包含此选项的换行符。文件也应该用换行符分隔。

答案 1 :(得分:4)

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

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

即使文件名包含空格,制表符或换行符,也可以使用。

相关问题