2017-06-22 53 views
0

我有一些数据来我从一个API调用,低于2点相同的路线。击转换数据为csv

"serialNumber=5086", "deviceName=CSECHO002", "address=1.1.1.3", "deviceType=Network Switch", "parentNames, "tag1 (Site)=East Coast", "tag2 (Location)=DATA CENTRE 2", "tag3 (Rack)=RACK 06", "tag4 (Tag 4)=", "tag5 (Tag 5)=Xtraction", "locationName=GOLLZDGP01:Gold Coast DGEX", "dgeName=GOLLZDGP01", "isSuspended=false", "clearOnOk=false", "smartNotify=true", "showOnSummary=true", "accountSerialNumber=49", "accountName=Echo Ent", "isReadOnly=false", "isImported=false", "model=Nexus7000 C7010 (10 Slot) Chassis", "vendor=Cisco Systems", "rediscoveryEnabled=true", "rediscoveryFrequency=1440", "rediscoveryNewTestsAction=updateAndLog", "rediscoveryUpdatedTestsAction=updateAndLog", "rediscoveryDeletedTestsAction=logOnly", "applicationProfiles=none", "configBackupEnabled=true", "configBackupFrequency=1440", "processCollectionEnabled=false", "flapPreventionWaitCycles=-1", "comment=Cisco Nexus 7000 Series Switches 
"serialNumber=5091", "deviceName=CSECHO001", "address=1.1.1.2", "deviceType=Network Switch", "parentNames, "tag1 (Site)=East Coast", "tag2 (Location)=DATA CENTRE", "tag3 (Rack)=RACK B5", "tag4 (Tag 4)=", "tag5 (Tag 5)=Xtraction", "locationName=GOLLZDGP01:Gold Coast DGEX", "dgeName=GOLLZDGP01", "isSuspended=false", "clearOnOk=false", "smartNotify=true", "showOnSummary=true", "accountSerialNumber=49", "accountName=Echo Ent", "isReadOnly=false", "isImported=false", "model=Nexus7000 C7010 (10 Slot) Chassis", "vendor=Cisco Systems", "rediscoveryEnabled=true", "rediscoveryFrequency=1440", "rediscoveryNewTestsAction=updateAndLog", "rediscoveryUpdatedTestsAction=updateAndLog", "rediscoveryDeletedTestsAction=logOnly", "applicationProfiles=none", "configBackupEnabled=true", "configBackupFrequency=1440", "processCollectionEnabled=false", "flapPreventionWaitCycles=0", "comment=Cisco Nexus 7000 Series Switches 

我怎样才能获得CSV格式的数据,没有字段名称?

我远了这一点,但它越来越乱了,我肯定有一个简单的办法只有抢=和下一个双引号或类似之间的字符串。

>  for LINE in $(/usr/bin/curl -b cookie_det -s --insecure 'https://my.url.com/api/rest/command/device.list?deviceName=CS*'); do 
> echo $LINE | sed 's/,/\n/g' | awk -F"=" '{ print $2}'| sed 's/"//g' ; 
> echo -------; ; done 
+0

2样本行对不起 –

+0

也管理得到这个工作:'在$(/ usr/bin/curl -b cookie_det -s --insecure'https://traverse.casino.internal/ ?API /休息/命令/ device.list DEVICENAME = AUGOLCS *');做echo $ LINE | sed's /,/ \ n/g'| awk -F“=”'{print $ 2}'| sed's /“// g'| sed':a; N; $!ba; s/\ n /,/ g'; echo; done' –

回答

0

假设模式完全按照上述规定,你可以使用submatching在一个sed替换得到你需要的东西:

sed -E 's/"[^=]*=([^"]*)("|$)/\1/g' 
+0

谢谢Jeremy,它对我的​​样本数据有效。全输出进行测试。 –

+0

它会掉下来的第一个地方是任何转义双引号,也可能什么多。如果你找到一个反例,它答复,我很乐意帮忙。 – Jeremy

+0

你能避免转义如果您从文件中读取或直接从API调用中读取。 – mikep

0

输入:foo.txt的

"serialNumber=5086", "deviceName=CSECHO002", "address=1.1.1.3", "deviceType=Network Switch", "parentNames, "tag1 (Site)=East Coast", "tag2 (Location)=DATA CENTRE 2", "tag3 (Rack)=RACK 06", "tag4 (Tag 4)=", "tag5 (Tag 5)=Xtraction", "locationName=GOLLZDGP01:Gold Coast DGEX", "dgeName=GOLLZDGP01", "isSuspended=false", "clearOnOk=false", "smartNotify=true", "showOnSummary=true", "accountSerialNumber=49", "accountName=Echo Ent", "isReadOnly=false", "isImported=false", "model=Nexus7000 C7010 (10 Slot) Chassis", "vendor=Cisco Systems", "rediscoveryEnabled=true", "rediscoveryFrequency=1440", "rediscoveryNewTestsAction=updateAndLog", "rediscoveryUpdatedTestsAction=updateAndLog", "rediscoveryDeletedTestsAction=logOnly", "applicationProfiles=none", "configBackupEnabled=true", "configBackupFrequency=1440", "processCollectionEnabled=false", "flapPreventionWaitCycles=-1", "comment=Cisco Nexus 7000 Series Switches 
"serialNumber=5091", "deviceName=CSECHO001", "address=1.1.1.2", "deviceType=Network Switch", "parentNames, "tag1 (Site)=East Coast", "tag2 (Location)=DATA CENTRE", "tag3 (Rack)=RACK B5", "tag4 (Tag 4)=", "tag5 (Tag 5)=Xtraction", "locationName=GOLLZDGP01:Gold Coast DGEX", "dgeName=GOLLZDGP01", "isSuspended=false", "clearOnOk=false", "smartNotify=true", "showOnSummary=true", "accountSerialNumber=49", "accountName=Echo Ent", "isReadOnly=false", "isImported=false", "model=Nexus7000 C7010 (10 Slot) Chassis", "vendor=Cisco Systems", "rediscoveryEnabled=true", "rediscoveryFrequency=1440", "rediscoveryNewTestsAction=updateAndLog", "rediscoveryUpdatedTestsAction=updateAndLog", "rediscoveryDeletedTestsAction=logOnly", "applicationProfiles=none", "configBackupEnabled=true", "configBackupFrequency=1440", "processCollectionEnabled=false", "flapPreventionWaitCycles=0", "comment=Cisco Nexus 7000 Series Switches 

FOO的.sh

while read -r line ; do 
    echo $line | sed -e 's/"[^=]*=\([^"]*\)"/"\1"/g' 
done < foo.txt 

输出:

"5086", "CSECHO002", "1.1.1.3", "Network Switch", "East Coast", "DATA CENTRE 2", "RACK 06", "", "Xtraction", "GOLLZDGP01:Gold Coast DGEX", "GOLLZDGP01", "false", "false", "true", "true", "49", "Echo Ent", "false", "false", "Nexus7000 C7010 (10 Slot) Chassis", "Cisco Systems", "true", "1440", "updateAndLog", "updateAndLog", "logOnly", "none", "true", "1440", "false", "-1", "Cisco Nexus 7000 Series Switches" 
"5091", "CSECHO001", "1.1.1.2", "Network Switch", "East Coast", "DATA CENTRE", "RACK B5", "", "Xtraction", "GOLLZDGP01:Gold Coast DGEX", "GOLLZDGP01", "false", "false", "true", "true", "49", "Echo Ent", "false", "false", "Nexus7000 C7010 (10 Slot) Chassis", "Cisco Systems", "true", "1440", "updateAndLog", "updateAndLog", "logOnly", "none", "true", "1440", "false", "0", "Cisco Nexus 7000 Series Switches" 
0

您也可以尝试使用awk来实现它,

$ awk -F'", ' '{for (i=1;i<=NF;i++){gsub(/".*=/,"",$i);printf "\"%s\"%s",$i,(i==NF)?"\n":", "}}' foo.txt 
"5086", "CSECHO002", "1.1.1.3", "Network Switch", "East Coast", "DATA CENTRE 2", "RACK 06", "", "Xtraction", "GOLLZDGP01:Gold Coast DGEX", "GOLLZDGP01", "false", "false", "true", "true", "49", "Echo Ent", "false", "false", "Nexus7000 C7010 (10 Slot) Chassis", "Cisco Systems", "true", "1440", "updateAndLog", "updateAndLog", "logOnly", "none", "true", "1440", "false", "-1", "Cisco Nexus 7000 Series Switches" 
"5091", "CSECHO001", "1.1.1.2", "Network Switch", "East Coast", "DATA CENTRE", "RACK B5", "", "Xtraction", "GOLLZDGP01:Gold Coast DGEX", "GOLLZDGP01", "false", "false", "true", "true", "49", "Echo Ent", "false", "false", "Nexus7000 C7010 (10 Slot) Chassis", "Cisco Systems", "true", "1440", "updateAndLog", "updateAndLog", "logOnly", "none", "true", "1440", "false", "0", "Cisco Nexus 7000 Series Switches" 

简要说明,

  1. -F'", ':设置字段分隔符为",(空间是最后一位数字)
  2. gsub(/".*=/,"",$i):消除各外商投资企业的所有匹配的模式ld