2017-02-23 3 views
0

私は1つのライナーを書こうとしていますが、私が間違っていることを理解できません。私は、次のコマンドを使用しようとしています:xargsをlinuxコマンドラインの1つのコマンドで複数回使用する

cat testadds | cut -f 1 -d "," | xargs -ifoo /bin/bash -c "cat testadds | cut -f 2 -d \",\" | xargs --replace=addr /bin/bash -c \"cat testadds | cut -f 3 -d \",\" | xargs --replace=num /bin/bash -c \"cat testmdl | sed 's/DUMMY/foo/g' | sed 's/IP1/addr/g' | sed 's/IP2/num/g'\"\"" 

私は次のように私のtestaddsファイルが設定され、アウトプットのために何を取得:

dev,IP1,IP2 

私は唯一の2 xargsでこれを行うとき、それは正常に動作しますが、3番目と最後のxargsを追加すると、出力はありません。あなたが何回ファイルを飾っているときにxargsを使うことができるかに制限があるのだろうかと思います。

予想される入力は、複数のデバイスを持つファイルからのものだと思います。入力にTestDeviceなり、1.1.1.1,2.2.2.2

exepected出力は次のようになります
-deviceSystemSoftware」デバイス:にTestDevice '6500 7 SLOT OPTICAL SW:1021'
-deviceCname「デバイス:にTestDevice ' 'PRIORITYのSLA - 識別子 - にTestDevice'
-deviceDateAdded 'デバイス:にTestDevice' '2017年2月24日'
-deviceNotes 'デバイス:にTestDevice' 'BTWB100269 - にTestDevice'
-hier' ペン先:OPR | 0グループ:Openreachグループ:TSO '
-hier' nib:opr | 0グループ:Openreachグループ:TSOグループ:Ciena '
-hierUnique' nib:op | 0グループ:オープンリーチグループ:TSOグループ:Cienaデバイス:testdevice '

-createEntityサービス:snmp-trap-handling {デバイス:testdevice} CA | 0 [+ opr-ciena-6500-alarms | + Nocol ] '
-createEntity 'サービス:コンフィギュレーション追跡{デバイス:にTestDevice} OPR | 0 [ciena6500]'

-createEntity 'インターフェース:にTestDevice | COLAN-1-X'
-entityDescription' インターフェース:にTestDevice | COLAN-1-X '' COLAN-1-X '
-createEntity'アドレス:testdevice | COLAN-1-X | 1.1.1.1 '
-devicePrimaryInterface' device:testdevice '' interface:testdevice | X '
-deleteEntity '住所にTestDevice | MGMT | 1.1.1.1'
-deleteEntity 'サービス:ippingmon {インタフェース:にTestDevice | MGMT} OPR | 0 []'
-deleteEntity 'インターフェース:にTestDevice | MGMT'
-createEntity 'インターフェース:にTestDevice | SHELFIP'
-entityDescription 'インターフェース:にTestDevice | SHELFIP' 'SHELFIP'
-createEntity 'アドレス:にTestDevice | SHELFIP | 2.2.2.2'

がうまくいけば、これは私が何を

を支援します達成しようとするのは、ファイルを変更して期待通りに表示することです出力。これは私の監視システムに追加することです。申し訳ありませんが、これまで私がこれまで行ったことは初めてです。情報が不足していることをお詫び申し上げます。あなただけでも1行にあなたの試みよりも短くなっている単一 whileループ、必要

+1

あなたのコマンドには理由がありますか: 1.ネストされたxargs呼び出しのレベルが3つあります。 2. xargsの使用を疑わしいものにしていますか? 期待される出力を表示してください。 –

+0

ああ、今なぜ私は複数の交換をしたいと思う。しかし、あなたは本当にあなたの入力全体と期待される出力を示す必要があります。 –

+0

予想される入力は、複数のデバイスを持つファイルからのものだと思います。 入力testIP1、testIP2 –

答えて

1

(外部のプログラムが存在しないため、とはるか安価に始め、すべては組み込みコマンドによって行われます):

# while IFS=, read -r dev ip1 ip2; do printf "-createEntity 'address:%s|%s|%s'\n" "$dev" COLAN-1-X "$ip1" "$dev" SHELFIP "$ip2"; done < input.txt 
while IFS=, read -r dev ip1 ip2; do 
    printf "-createEntity 'address:%s|%s|%s'\n" \ 
    "$dev" COLAN-1-X "$ip1" \ 
    "$dev" SHELFIP "$ip2" 
done < input.txt 
+0

私はいくつかの行を追加しましたが、前に追加しませんでした。申し訳ありませんが、私はそれを取るinput.txtは本質的に私は情報が格納されてtestaddsファイルですか?あなたの助けてくれてありがとう、私の初心者のご迷惑をおかけして申し訳ありません –

+0

あなたはフォーマット文字列を処理した後にパラメータが残っている場合に再び処理するprintf機能を使用しています。 @PatrickMathieusを知ってうれしいです(または読みやすいように2番目のprintfを使用してください)。 –

関連する問題