我有一个文件A,内容如下:
/filea
/fileb
/filec
/filed
我有一个脚本xyz.pl来读取一个文件并用它做一些事情
现在我想自动将文件A中的每一行作为参数提供给xyz.pl。有效地执行以下命令(按此顺序)
xyz.pl /filea
xyz.pl /fileb
xyz.pl /filec
xyz.pl /filed
有没有快速的单行命令呢?
答案 0 :(得分:6)
将xargs与-n选项一起使用
cat A | xargs -n 1 xyz.pl
答案 1 :(得分:4)
bash中的单行。
$ for f in `cat A`; do xyz.pl $f; done
答案 2 :(得分:1)
您可以使用xargs
。应该做的是接受'文件A'的每一行(取自cat
)并执行给定(xyz.pl
)的命令,并将该数据作为参数。
cat 'file A' | xargs -I{} xyz.pl '{}'
这表明{}
是论证应该去的地方,并将其置于xyz.pl
之后。如果您希望将来更改命令,它会更灵活。
注意,这个给定的解决方案只能假设每个文件名没有空格。
编辑:等等,它似乎适用于我的空间......
编辑:如果这在所有情况下均无效,请举例说明:
<强> xyz.pl 强>:
#!/usr/bin/perl
print "Perl processing: $ARGV[0]\n";
<强>此时就把one.txt存盘强>
/filea
/fileb
/filec
<强>运行:强>
$ cat one.txt | xargs -I{} ./xyz.pl '{}'
Perl processing: /filea
Perl processing: /fileb
Perl processing: /filec
答案 3 :(得分:1)
Perl one-liner就足够了:
perl -lnwe 'print qx(xyz.pl $_)' fileA.txt
说明:
-l
- autochomp每一行,添加换行符(以避免与换行符不一致)-n
- 隐式while(<>) { .. }
循环程序qx()
- 在shell中执行命令并返回标准输出虽然最好的选择无疑是改变你的xyz.pl脚本也接受标准输入形式的参数。很难说你会怎么做,因为我不知道你是如何处理论证的。那么这将是一个简单的问题:
perl xyz.pl < fileA.txt
或者有一些选项,例如: Getopt::Long
perl xyz.pl -f fileA.txt # file as argument
perl xyz.pl /foo # simple argument