2016-03-29 18 views
4

Bir ülke kodu listesiyle bir .txt dosyasını ayrıştırmak için jq'yi kullanmak ve bir json nesnesindeki değere yazmak istiyorum. İşte jq read .txt dosyasını okuyun ve değerleri json dosyasına yazın

ben ne var bugüne kadar

cat myfile.json | 
jq -R -f test_id.txt 'select(.country == []).country = "test_id.txt"' > newfile.json 

.txt dosyası bu

"NSC" 
"KZC" 
"KCC" 
"KZL" 
"NZG" 
"VRU" 
"ESM" 
"KZF" 
"SFU" 
"EWF" 
"KQY" 
"KQV" 

benziyor ve benim json İşte bu

{ 
    "scsRequestId": null, 
    "includeMetadata": true, 
    "includeHoldings": true, 
    "country": [], 
    "region": [], 
    "oclcSymbol": [] 
} 

benziyor hata I olduğunda

jq: error: syntax error, unexpected QQSTRING_START, expecting $end (Unix shell quoting issues?) at <top-level>, line 2: 
"KZC" 
jq: 1 compile error` 

Ülke kodlarının ülke dizisine gitmesini istiyorum.

Herhangi bir yardım

+0

Girdinizin metin dosyasına tırnak var bir nedeni var mı? Bir JSON dizesi değilse, neden olduğu gibi alıntı yapalım? –

+0

@CharlesDuffy Bu şekilde aldım. Seçime göre değil. Benzer bir dosyayı tırnak işaretleri olmadan denedim ancak bu da işe yaramıyor. İşlemleri jq ile işlemeden önce çıkarabilirim. – mjo

+0

Düzenlemenizin cevabımdan daha yeni olduğunu fark ettim. Bu sorunun cevabın yanlış yorumlanmasıyla ilgili olduğunu söylemek mümkün mü? [Onu çalıştırdığımda, liste * ülke dizisine girer; İlk kod revizyonundaki "bölgeler" olarak adlandırılan değişken, çıktıyı etkilemediği için anlamsızdır]. –

cevap

6

-f 'ın argümanı çalıştırmak için filtreyi okumak için dosyasıdır takdir edilmektedir. Bir dosyadan veri okumak istiyorsanız, -f değil --slurpfile için kullanın.

Böylece: En sağlanan girdilerle

jq --slurpfile countries test_id.txt '.country=$countries' <myfile.json >newfile.json 

çalıştırdığınızda, newfile.json sonuçlanan içeriği şunlardır:

{ 
    "scsRequestId": null, 
    "includeMetadata": true, 
    "includeHoldings": true, 
    "country": [ 
    "NSC", 
    "KZC", 
    "KCC", 
    "KZL", 
    "NZG", 
    "VRU", 
    "ESM", 
    "KZF", 
    "SFU", 
    "EWF", 
    "KQY", 
    "KQV" 
    ], 
    "region": [], 
    "oclcSymbol": [] 
} 
İlgili konular