2016-04-05 26 views
1

Girdi: Aşağıdaki yapıda İçinde Ip adreslerinin bir set ile bir dosya adı çağrıda 'myseedips'Bash Senaryo bir JSON dosyası oluşturmak için

10.204.99.15 
10.204.99.12 
10.204.99.41 

Bunlar can olmak 'n' IP adres hattının satır sayısı.

Çıkış Bash programlama hakkında hiçbir fikrim yok. Ama aşağıdaki yapıda bir JSON dosyası oluşturmak için bir bash betiği yazmalıyım. Bu IP adreslerinin bir döngü içinde olması gerekir, böylece JSON, myseedips dosyasının uzunluğuna bağlı olarak değişecek/genişleyecektir.

"cassandra": { 
     "nodes": [ 
     {"ip_address": "10.204.99.15","type": "seed"}, 
     {"ip_address": "10.204.99.12","type": "seed"}, 
     {"ip_address": "10.204.99.41","type": "seed"}] 
    }, 

Ayrıca geçen dışındaki tüm düğümlerin her düğüm sonunda virgül eklemek mantığı eklemeniz gerekir. Yalnızca bir düğüm varsa virgül eklemeyin.

Örnek: Aşağıdaki kod mantığı gibi bir şey olabilir, ancak bash programlamada.

j string 
j = `"cassandra": {"nodes": [` 
for i =0;i<len(ips);i++ { 
    j = j + `{"ip_address": "` + ips[i] + `","type": "seed"},` 
} 
j = j + `}]}` 

Teşekkür Nissar Şeyh

kurtarmaya

cevap

1

jq kullanarak, çalışılabilir bir diziye ama basit ham metinden dönüştürmek için ekstra bir geçiş gerekir:

$ jq -R '.' myseedips | jq -s '{cassandra:{nodes:map({ip_address:.,type:"seed"})}}' 

Bu şu sonuçları verir: Jeff'in cevabı Dahası

{ 
    "cassandra": { 
    "nodes": [ 
     { 
     "ip_address": "10.204.99.15", 
     "type": "seed" 
     }, 
     { 
     "ip_address": "10.204.99.12", 
     "type": "seed" 
     }, 
     { 
     "ip_address": "10.204.99.41", 
     "type": "seed" 
     } 
    ] 
    } 
} 
+0

Thant mükemmel bir cevap jeff sizin jq inputs filtresi varsa. Bu çalıştı. Teşekkürler – Nissar

+0

Jeff, bu döngüde yayınlanan bir sorum daha var mıdır? – Nissar

0

awk!

bir şablon awk çözüm

$ awk 'BEGIN{print "header"} 
    NR==FNR{c=NR;next} 
      {print "prefix",$1,"suffix" (FNR<c?",":"]")} 
     END{print "footer"}' myseedips{,} 

header 
prefix 10.204.99.15 suffix, 
prefix 10.204.99.12 suffix, 
prefix 10.204.99.41 suffix] 
footer 

üstbilgi, altbilgi, önek ve sonek yerini alabilir olabilir.

0

, Lütfen dönüşümün bir jq komutuyla gerçekleştirilebileceğini unutmayın. Aksi

jq -Rn '[inputs] | {cassandra:{nodes:map({ip_address:.,type:"seed"})}}' 

:

jq -Rs 'split("\n") | {cassandra:{nodes:map({ip_address:.,type:"seed"})}}' ips.txt