2016-04-13 9 views
0

フラットファイルを読み込み、その値をあらかじめ生成されたemcliステートメントに挿入するループの作成に取り組んでいます。フラットファイルには、空白で区切られた012ターゲットファイルのtarget_nametarget_typeが含まれています。私は、ターゲットごとに更新しようとしているemcliコマンドは次のとおりです。フラットファイルと更新ステートメントを読むためのUnixループ

emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 

私はそれがファイルを読み行い、文に値を更新する方法がわからないように、ループを開始する問題を抱えています。私は多くの経験のスクリプトを持っていません。

+0

http://mywiki.wooledge.org/BashFAQ/001 –

+0

を投稿することができ、しばらくのファイルを読み込んだ後、コマンドを期待し、@EtanReisnerも注意してくださいそれは:http://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice – ritesht93

+0

@ ritesht93私はあなたが何だったか分かりません私に見せようとすると、シェルは大きなファイルを読み込むための非常に良い解決法ではありませんが(それはそれほどうまく機能しません)、それは完全に合理的です他のコマンドを実行するためにコンテンツを使用する必要があるときにも、シェルの読み込み時間が実行時間を支配しない可能性があります。しかし、そうです。代わりに 'awk'のようなものを使うことができるのであれば、それは一般に好ましい方法です。 –

答えて

1

注:解決策は、次の前提に基づいています。

お客様のご意見によると、フラットファイルのファイルサイズはtarget_nametarget_typeです。

フラットファイルa.txt

host1 hosts 
host2 j2ee_application 
host3 metatdata_repository 
host4 EM 
host5 Console 
host6 Service 
host7 oracle_oms_pbs 
host8 weblogic_j2eeserver 

シェルスクリプト:

スクリプトそしてちょうどそれぞれの行を反復しながら、第一及び第二のフィールドを読み、target_nametarget_typeemcliコマンドを更新する必要があります。

/\echo文内に表示され、コマンド/文全体が正しく印刷されるように追加されました。

grep -v ^$は、空白行を無視します。

cat a.txt |grep -v ^$ | 
    while read target_name target_type 
    do 
     echo "emcli set_target_property_value -subseparator=property_records=\"@@\" -property_records=\"${target_name}@@${target_type}@@[email protected]@dept_name\"" 
    done 

結果:あなたは、あなたの入力ファイルを

emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
emcli set_target_property_value -subseparator=property_records="@@" -property_records="[email protected]@[email protected]@[email protected]@dept_name" 
+0

これを試しましたが、出力は次のように出力されます emcli set_target_property_value -subseparator = property_records = "@@" -property_records = "host1 @@@@ Department @@ dept_name" ターゲットタイプの別のemcliコマンドを使用 – Keeks

+0

実際には、これは機能します。ありがとうございました。:-)私はフラットファイルに見て、それはそれは host1の ホスト host2の j2ee_application として記載されているし、それが働いた – Keeks

+0

うれしいそれらのそれぞれの行をスキップしていた、あなたは答えを受け入れ、それに応じて投票することができます –

関連する問題