2017-02-23 242 views
0

我想寫一個班輪,並不能找出我做錯了什麼。我嘗試使用以下命令:如下使用xargs多次在一個命令在linux命令行

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,它工作正常,但是當我添加第三個和最後一個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 r | 0 group:Openreach組:TSO組:Ciena設備:testdevice'

-createEntity'service:snmp-trap-handling {device: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'address:testdevice | COLAN-1-X | 1.1.1.1'
-devicePrimaryInterface'device:testdevice''interface:testdevice | COLAN-1- 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

是否有你的命令的原因: 1.有3級嵌套的xargs調用 2.似乎沒有對它的參數做任何事情,使xargs的使用值得懷疑? 請向我們展示您的預期產出。 –

+0

啊,現在我明白了爲什麼 - 你想做多個替換。但是您確實需要向我們展示您的全部輸入和預期輸出。 –

+0

我猜想預期的輸入來自具有多個設備的文件。 輸入將是爲TestDevice,testIP1,testIP2 –

回答

1

你只需要一個單一的while循環,甚至在同一行比你的嘗試(和更便宜,因爲沒有外部程序開始,一切都是由內置的命令完成)短:

# 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(或者爲了便於閱讀而使用第二個printf)。 –