2016-05-04 31 views
1

我有FramesList.txt,该文件包含5 .xml文件名。没有生成路径,因为该列表是由xml ls > FramesList.txt命令创建的。运行命令在文件中的每一行

我想在列出的每个.xml文件上运行xmlstarlet命令。

FramesList.txt 
FR0391W.xml 
FR0921S.xml 
FR0193A.xml 
FR0192B.xml 
FR0132E.xml 

那会怎么样?它是一个循环吗?

+4

虽然这个问题可能会得到解答,但您应该展示您的研究成果和您尝试过的内容。现在看起来您希望我们解决您的问题。 – moffeltje

+1

[你有什么尝试?](http://whathaveyoutried.com)请问 你的问题显示你的 有问题的代码[mcve],然后我们可以尝试帮助 具体问题。你还应该阅读[问]。 –

+0

对不起,我甚至不知道在这里使用什么命令..感谢andlrc谁给我看xargs。新手在这里,不知道关于xargs。 – buzzin

回答

8

您可以使用xargs

xargs < FramesList.txt -n 1 xmlstartet 
#  ^   ^^
#  |    | Command to run 
#  |    Max number of arguments (xmlstartet will be called for 
#  |    each line in input file) 
#  Input file 
+0

我建议也使用'-r'选项,以防万一输入文件为空。 – user1934428

+0

@andlrc这很有帮助,虽然当我将xmlstarlet输出到.csv时,我失去了格式。它会把它变成一条长长的路线,而不是休息。相反,我使用以下方法:'cat FramesList.txt | xargs xmlstarlet -n> FrameInfo.csv'不知道为什么-n必须在那里,但是它带来了正确的格式。 – buzzin

+0

看起来像这个命令将所有参数串在一起,并且您需要包含'-L1'来获得每行一个命令。 –

2
while read -r line 
do 

xmlstarlet "$line" 

done <FramesList.txt 
+0

你通常应该'阅读'r'不要以任何特殊的方式处理。对于OP来说,它可能不是问题。还要记得引用变量扩展:'xmlstartet“$ line”',否则它将会进行分词 – andlrc

+0

感谢所做的更改。 – monk

0

我想大多数XML斯塔利特命令接受多个文件作为参数,因为你的输入列表是小,你也可以写

xml COMMAND $(<FramesList.txt)