如何在shell脚本中给出文件的输出位置?

时间:2019-02-07 11:33:35

标签: r shell perl variables

我有一个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

如果文件夹包含许多文件,则它将仅使用用户定义的文件并进行处理。 有没有办法做到这一点?

1 个答案:

答案 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