【问题标题】:input to the program with all the strings in an array one by one将数组中的所有字符串一一输入到程序
【发布时间】:2012-08-27 21:04:09
【问题描述】:

我有一个由许多 perl 脚本组成的 shell 脚本,其中一个 perl 脚本每次都必须使用不同的输入运行,并且值必须存储在最后的单个文件中,如图所示

 #!/bin/sh
 .....
 ....
 perl test.pl apple
 perl test.pl mango
 perl test.pl banana
 ... 
... 
....

我通过查看使用这些名称生成的文件在命令行中键入这些名称。

**names.txt**
apple
mango
banana

**names.txt**
    apple    mango   banana

它们是 perl 或 shell 中的一种方式,它一次将每个名称作为输入。
也就是说可以将names.txt视为一个数组,然后perl脚本使用ARGV或任何其他方式一次将每个数组值作为输入。这样我就可以拥有像

这样的shell脚本
#!/bin/sh
     .....
     ....
     perl test.pl names.txt
     .... 
    ... 
    ....

【问题讨论】:

    标签: arrays perl shell command-line-arguments


    【解决方案1】:

    编写从文件中获取输入的 perl 程序的常用方法是按如下方式构造它们:

    while ($line = <>) {
    
        # do stuff with $line
    }
    

    如果在命令行中给出了文件名,perl 会自动将它们一一打开,并将这些行输入到您的脚本中。如果没有给出文件名,它将从标准输入中读取。

    但是如果你这样写你的脚本,你将不能直接在命令行上给它结果,它们必须在一个文件或标准输入中。

    要在同一行处理多个水果,您的代码可以这样做:

    while (my $line = <>) {
    
        chomp $line;
    
        foreach my $fruit ( split ' ', $line ) {
    
            # do something with $fruit
        }
    }
    

    【讨论】:

    • open FILE2, "&lt;31.txt"; open FILE3, "&gt;&gt;file2.l"; open FILE123, "&lt;names.txt"; my $names; while (my $line=&lt;FILE2&gt;) { if ($line =~ m/**$names**/ig) .... .... .... ... 这是我的代码,$names 每次都必须给出从 names.txt 中获取的不同输入。
    • 你的代码在我写# do something with $fruit的地方。只需将变量名称从$names 更改为$fruit。或者,也许您可​​以先读取所有水果名称,然后将它们放入一个数组并在您的代码中使用它。我只是向您展示了处理命令行中给出的文件的一般方法,您可以随心所欲地处理它。
    【解决方案2】:

    在 bash 中,一行一行:

    while read fruit
    do
      perl test.perl "$fruit"
    done < names.txt
    

    【讨论】:

    • 我是编程新手,请告诉我什么是 bash?我应该在我的 shell 脚本中编写这些命令吗????
    • bash 是与 Bourne-shell 兼容的 shell。使用 #!/bin/bash 作为你的 shebang 行(假设这是 bash 所在的位置)(尽管这个结构可能适用于 sh)。
    • 是的,我明白了...我必须在 perl 脚本使用命令行中给出的输入的地方使用 ARGV[$i] 吗?????
    • 这些行将按照您的要求一次传递给脚本。
    • 我的代码在命令行中给出名称时运行,但是当我使用这组行时,它给了我不需要的输出...根据我得到的输出,我觉得 perl 脚本不是取它需要取的输入值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多