我有一个文件,它以制表符分隔的方式包含以下信息:
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编写这两个文件的包装。
谢谢
答案 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"
这样的引用。 read
从STDIN
读取,通常会等待用户输入,但< fileA
fileA
的内容会重定向到STDIN
,以便read
从那里接受它的输入。
答案 2 :(得分:1)
你也可以使用一个衬里红宝石:
ruby -ne 'system( "./fileB.rb #{$_}" )' < fileA
说明:
-e
这允许我们从命令行-n
其他有用的标志是-n
(有点像sed -n
或awk
),该标志告诉ruby逐行读取输入或输入文件,如while循环$_
默认红宝石保存当前行存储在$ _ variable