将一个文件的值传递到另一个文件作为输入

时间:2014-04-11 09:16:25

标签: ruby bash shell

我有一个文件,它以制表符分隔的方式包含以下信息:

abscdfr  2   5678
bgbhjgy  7   8756
ptxfgst  5   6783

让我们调用这个文件A,它包含2000行

我还有另一个用ruby编写的文件B

将这些值作为命令行输入:

f_id = ARGV[0]
lane = ARGV[1].to_i 
sample_id = ARGV[2].to_i
puts " #{f_id}_#{lane}_#{sample_id}.bw"

我通过提供文件A

中的信息在ruby中执行文件B.

./ fileB.rb abscdfr 2 5678

我想知道如何以递归方式将文件A的值作为输入传递给文件B.

如果它是一个值很容易,但我对三个值感到困惑。

请帮我用bash或ruby编写这两个文件的包装。

谢谢

3 个答案:

答案 0 :(得分:1)

您可以使用一个小的bash脚本循环遍历文件中的每一行,并将内容作为参数输出到另一个脚本。

while read line; do eval "./fileB.rb $line" done < fileA

这将评估引号中的行,就像你自己输入它一样。

答案 1 :(得分:1)

以下命令将在bash中完成工作:

while read line; do ./fileB.rb $line; done < fileA

这会将每行读入line。然后它为每一行运行./fileB.rb $line。在评估命令行之前,$line被替换为,因此每行中的每个单词都作为自己的参数传递,重要的是没有像"$line"这样的引用。 readSTDIN读取,通常会等待用户输入,但< fileA fileA的内容会重定向到STDIN,以便read从那里接受它的输入。

答案 2 :(得分:1)

你也可以使用一个衬里红宝石:

ruby -ne 'system( "./fileB.rb  #{$_}" )' < fileA

说明:

  • -e这允许我们从命令行
  • 指定脚本
  • -n其他有用的标志是-n(有点像sed -nawk),该标志告诉ruby逐行读取输入或输入文件,如while循环
  • $_默认红宝石保存当前行存储在$ _ variable