我有一个在终端中运行的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
...
答案 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
并在每个输入文件上执行java脚本。请注意,它们可能不包含此选项的换行符。文件也应该用换行符分隔。
答案 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
即使文件名包含空格,制表符或换行符,也可以使用。