2017-02-23 245 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)。 –