2017-06-22 50 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