ファイルから読み取った文字列の先頭と下部にいくつかの文字列を追加します。

ファイルから読み取った文字列の先頭と下部にいくつかの文字列を追加します。

私は他のプログラムからデータを取得するシェルスクリプトを書いています。対応する変数値を使用してファイルの内容を読み取り、一部の内容をこのデータの先頭と下に追加します。

以下は例です。

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.xmldef_lop.xmlpqr_lop.xml_lop.xmlclient_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

もちろん、各ファイルに何を含めたいかによって異なります。

おすすめ記事