
私は他のプログラムからデータを取得するシェルスクリプトを書いています。対応する変数値を使用してファイルの内容を読み取り、一部の内容をこのデータの先頭と下に追加します。
以下は例です。
readonly file_location=$location
readonly client_id = $id
readonly client_types = $type_of_client
ここで、$location、$id、$type_of_client の値は他のプログラムから渡されます。以下は例です。
- $location は、次のフルパス名になります。
/home/david/data/12345678
- $id は数値です:
120
- $ type_of_clientはスペースで区切られた単語です。
abc def pqr
現在、この場所には、/home/david/data/12345678
などのファイルがあります。意味は常に同じなので、ハードコーディングできます。上記のように変数を繰り返してファイル名を作成し、ファイル全体を文字列として読み取る必要があります(または他のより良い方法がある場合はそうです)。私の仕事は次のとおりです。abc_lop.xml
def_lop.xml
pqr_lop.xml
_lop.xml
client_types
#!/bin/bash
readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client
for word in $client_types
do
echo $word
file_value=`cat "file_location"/"$word"_lop.xml`
echo $file_value
done
これで、シェルスクリプトで文字列操作などの特別な操作を実行する必要がありますが、どうすればよいかわかりません。今、私たちが読んでいるすべてのファイルの上部と下部に何かを追加する必要があります。このファイルから読み取った値に関係なくです。次のように同じことを行う必要があります。
例:abc_lop.xml
次のコマンドを使用してファイルを表示すると、次のようになりますvi
。
<Hello version="100">
<!-- some stuff here -->
</Hello>
次のようにしてください。
<hello_function>
<name>Data</name>
<Hello version="100">
<!-- some stuff here -->
</Hello>
</hello_function>
ご覧のとおり、上部に追加して<hello_function><name>Data</name>
下部に追加しました</hello_function>
。シェルスクリプトでこれを行うにはどうすればよいですか?
したがって、通常、上記echo $file_value
の各追加値は印刷する必要がありますclient_types
。
#!/bin/bash
readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client
for word in $client_types
do
echo $word
file_value=`cat "file_location"/"$word"_lop.xml`
// may be do something here?
echo $file_value // this should print out appended string value both at top and bottom.
done
各XMLファイルは確かに10MB未満です。
答え1
実行中の操作がデータ出力のみである場合は、変数を読み取る必要はありません。メインループの場合:
for word in $client_types; do
echo "$word"
echo '<hello_function>'
echo '<name>Data</name>'
cat "$file_location/${word}_lop.xml"
echo '</hello_function>'
done
もちろん、これにより変更されたすべてのファイルがリンクされ、後で分割するのが難しくなります。しかし、動作します。
編集:別々のファイルとして出力するには:
for word in $client_types; do
fn="${word}"_new.xml
echo "$word"
echo '<hello_function>' >>"$fn"
echo '<name>Data</name>' >>"$fn"
cat "$file_location/${word}_lop.xml" >>"$fn"
echo '</hello_function>' >>"$fn"
done
もちろん、各ファイルに何を含めたいかによって異なります。