Bash 在文件中的每一行上运行命令
我有Bash 在文件中的每一行上运行命令,bash,shell,unix,xmlstarlet,Bash,Shell,Unix,Xmlstarlet,我有FramesList.txt,该文件包含5个.xml文件名。没有生成路径,因为列表是由xml ls>FramesList.txt命令创建的 我想对列出的每个.xml文件运行xmlstarlet命令 FramesList.txt FR0391W.xml FR0921S.xml FR0193A.xml FR0192B.xml FR0132E.xml 那看起来怎么样?它是一个循环吗?在读取-r行时 while read -r line do xmlstarlet "$line" done
FramesList.txt
,该文件包含5个.xml
文件名。没有生成路径,因为列表是由xml ls>FramesList.txt
命令创建的
我想对列出的每个.xml
文件运行xmlstarlet
命令
FramesList.txt
FR0391W.xml
FR0921S.xml
FR0193A.xml
FR0192B.xml
FR0132E.xml
那看起来怎么样?它是一个循环吗?在读取-r行时
while read -r line
do
xmlstarlet "$line"
done <FramesList.txt
做
xmlstarlet“$line”
完成您可以使用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
xargs
我认为大多数XML Starlet命令接受多个文件作为参数,而且由于您的输入列表很小,您也可以编写
xml COMMAND $(<FramesList.txt)
xml命令$(虽然这个问题可能会得到回答,但您应该展示您的研究和您尝试过的内容。现在看来您希望我们解决您的问题。请将您的问题展示给我们,让我们看看您遇到问题的代码,然后我们可以试着帮助您解决具体问题。您还应该阅读。对不起,各位,我甚至不知道是什么命令。)在这里使用..感谢AndrlRC向我展示了xargs。这里的新手都不知道xargs。你通常应该read-r
,不要以任何特殊方式处理。对于OP的情况,这可能不是问题。还记得引用变量扩展:xmlstartet“$line”
或者它将进行分词我建议也使用-r
选项,以防有一天输入文件为空。@andlrc这很有帮助,尽管当我将xmlstarlet输出到.csv时,我丢失了格式。这将使它变成一条长行,而不是断行。相反,我使用了以下命令:cat FramesList.txt | xargs xmlstarlet-n>FrameInfo.csv
不确定为什么必须有-n,但正是它带来了正确的格式。似乎这个命令将所有参数串在一行上,您需要包含-L1
,以便每行获得一个命令。