[英]how to get a value from a json key value pair in linux shell scripting
[英]LINUX - Shell Scripting - Generate map(key value pair) from flat file
我有一個類似於JSON的平面文件(不完全相同)。 最后的動機是將其轉換為CSV(按特定順序,與輸入JSON文件不同)和轉儲到數據庫中。 現在因為輸入文件並不總是以相同的順序AWK,cut等不會有用。 需要像HASHMAP這樣的東西。 附加樣本輸入和預期輸出。 建議請。
輸入JSON文件樣本(我有1000個文件,每個50K行,每個200列)
{"Field1":{"string":"Value,123"},"Field2":{"string":"564243"},"Field3":{"string":"SWCHP0001155"},"LOCATION":null,"OWNERUID":{"string":"655,,34"}}
{"Field1":{"string":"Value,456"},"Field2":{"string":"89565655"},"Field3":{"string":"SWCHP0001166"},"LOCATION":{"string":"BEACH,"},"OWNERUID":{"string":"65534"}}
........
輸出CSV文件按特定順序排序,按順序說(OWNERUID,LOCATION,Field1,Field2,Field3)
655;;34,null,Value;123,564243,SWCHP0001155
65534,BEACH;,Value;456,89565655,SWCHP0001166
到目前為止我的想法是做一些字符串操作改變eveything一個標准格式如下,將數據傳輸到hashmap,獲取所需和轉儲CSV
中級標准格式:(可以更改,請提示)
Field1?Value;123,Field2?564243,Field3?SWCHP0001155,LOCATION?null,OWNERUID?655;;34
Field1?Value;456,Field2?89565655,Field3?SWCHP0001166,LOCATION?BEACH;,OWNERUID?65534
........
注意:
jq是一個旨在處理JSON字符串的C工具。 它充當過濾器(或過濾器鏈),一次處理一個輸入並具有相當不錯的文檔。 它可能在您的發行版中可用,或假裝從源代碼構建,除了C編譯器之外沒有任何依賴性。 在您的示例中,這應該足夠了:
$ cat file.json | jq '[.OWNERUID.string, .LOCATION.string?, .Field1.string?, .Field2.string?, .Field3.string?]|join(";")'
"655,,34;;Value,123;564243;SWCHP0001155"
"65534;BEACH,;Value,456;89565655;SWCHP0001166"
$
或者如果你想擺脫封閉的引號,sed過濾器可以刪除它們:
$ cat ess.txt | jq '[.OWNERUID.string, .LOCATION.string?, .Field1.string?, .Field2.string?, .Field3.string?]|join(";")' | sed -e 's/^"\(.*\)"$/\1/'
655,,34;;Value,123;564243;SWCHP0001155
65534;BEACH,;Value,456;89565655;SWCHP0001166
$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.