Perl 将文件内容用作程序的参数
我有一个包含以下内容的文件:Perl 将文件内容用作程序的参数,perl,shell,arguments,Perl,Shell,Arguments,我有一个包含以下内容的文件: /filea /fileb /filec /filed 我有一个脚本xyz.pl来读取一个文件并对其进行处理 现在,我想自动将文件中的每一行作为参数提供给xyz.pl。有效地执行以下命令(按该顺序) 有没有快速的一行命令来执行此操作?您可以使用xargs。它应该做的是接收“文件A”(取自cat)的每一行,并以该数据作为参数执行给定的命令(xyz.pl) cat 'file A' | xargs -I{} xyz.pl '{}' 也就是说,{}是参数应该去的地方,
/filea
/fileb
/filec
/filed
我有一个脚本xyz.pl来读取一个文件并对其进行处理
现在,我想自动将文件中的每一行作为参数提供给xyz.pl。有效地执行以下命令(按该顺序)
有没有快速的一行命令来执行此操作?您可以使用
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
将xargs与-n选项一起使用
cat A | xargs -n 1 xyz.pl
bash中的一行
$ for f in `cat A`; do xyz.pl $f; done
一行就足够了:
perl -lnwe 'print qx(xyz.pl $_)' fileA.txt
说明:
-自动压缩每行,添加要打印的换行符(以避免与换行符不一致)-l
--隐式-n
循环程序while(){..}
——在shell中执行命令并返回标准输出qx()
perl xyz.pl < fileA.txt
这将不会通过一行一行的参数你的代码与我的选项将工作,我已经张贴之前,你已经编辑我猜:Pthanks的尝试。。。对于更一般的情况,我的情况有点复杂。在其中添加一个失败检查,如果其中一个迭代失败,则中止循环可能是一个好主意。避免使用cat,并合并Donal的建议:
同时读取arg;doxyz.pl“$arg”| | break;完成
为什么不向xyz.pl
添加一些功能,这样您就可以将文件名作为参数传递,或者从STDIN接收参数?这不是我的程序,所以我不想弄乱代码。是否禁止您复制程序并重写输入函数?我有理由不这样做。当然,你可以打开一个黑框来编辑它,但是如果其他人正在使用它,而你破坏了你系统的其他部分呢?我不知道你的情况,所以我真的不能说你应该或不应该做什么。如果xargs为你做了,那对你有好处。就我个人而言,我是一个在任何情况下都会寻找完美解决方案的人,在这种情况下,完美的解决方案是修改原始脚本。
perl xyz.pl < fileA.txt
perl xyz.pl -f fileA.txt # file as argument
perl xyz.pl /foo # simple argument