我有一个Shell脚本,其中包含Perl脚本和R脚本。
我的Shell脚本R.sh:-
primaryFunction
这是我的R.pl(头):-
Droid
Perl脚本的输出是Shell脚本的输入,Shell的输出是R脚本的输入。
我想通过提供输入文件名和输出文件名来运行Shell脚本,例如:-
#!/bin/bash
./R.pl #calling Perl script
`perl -lane 'print $F[0]' /media/data/abc.cnv > /media/data/abc1.txt`;
#Shell script
Rscript R.r #calling R script
如果文件夹包含许多文件,则它将仅使用用户定义的文件并进行处理。 有没有办法做到这一点?
答案 0 :(得分:0)
我想这就是您想要的:
#!/bin/bash
# command line parameters
_input_file=$1
_output_file=$2
# @TODO: not sure if this path is the one you intended...
_script_path=$(dirname $0)
# sanity checks
if [[ -z "${_input_file}" ]] ||
[[ -z "${_output_file}" ]]; then
echo 1>&2 "usage: $0 <input file> <output file>"
exit 1
fi
if [[ ! -r "${_input_file}" ]]; then
echo 1>&2 "ERROR: can't find input file '${input_file}'!"
exit 1
fi
# process input file
# 1. with Perl script (writes to STDOUT)
# 2. post-process with Perl filter
# 3. run R script (reads from STDIN, writes to STDOUT)
perl ${_script_path}/R.pl <"${_input_file}" | \
perl -lane 'print $F[0]' | \
Rscript ${_script_path}/R.r >"${_output_file}"
exit 0
请参阅注释,以了解被调用脚本的行为。
注意::我不太理解为什么您需要使用Perl过滤器对Perl脚本的输出进行后处理。为什么不将其直接集成到Perl脚本本身中?
奖金代码::这是在R.pl
中编写主循环以用作适当过滤器的方式,即从STDIN
中读取行并将结果写入{{ 1}}。您也可以在其他语言中使用相同的方法,例如R。
STDOUT