2016-05-04 21 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]を表示するように質問してください。 特定の問題。 [ask]も読んでください。 –

+0

申し訳ありません皆さん、私はここで使用するコマンドを知りませんでした。xargsを見せてくれたandlrcに感謝します。ここの初心者は、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

このコマンドのように、すべての引数を1行にまとめます。行ごとに1つのコマンドを取得するには、 '-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) 
を書くことができ
関連する問題