Debian
將純數據轉換為 json 文件
每個人。我對 linux 還是很陌生,在閱讀這個網站的所有人中,我學到了很多東西。我的會計程序有點麻煩,這就是為什麼我要經常找你。我想將我的數據從純文字移動到 json,我相信這會給我帶來更好的結果和更大的靈活性。
我有一個文件夾,其中包含分隔文件中的資訊。文件是這樣的:
20170404 pago 80051442-4 002-001-0080057 310000 310000 si 2017-06-05
我想將此資訊複製到新文件中,其中每一行都是一個新的 json 欄位。像這樣的東西:
{ "field1":"20170404", "field2":"pago", "field3":"80051442-4", "field4":"002-001-0080057", "field5":"310000" "field6":"", "field7":""; "field8":"310000" "field9":"si" "field10":"2017-06-05" }
我正在尋找一個腳本來讀取整個目錄並建構這些新文件:oldfile.json。
之後,我想在不同的列中標記其中幾個文件的結果:
file1 field1 field2 field3 field4 field5 field6 field7 file2 field1 field2 field3 field4 field5 field6 field7 file3 field1 field2 field3 field4 field5 field6 field7 file4 field1 field2 field3 field4 field5 field6 field7 file5 field1 field2 field3 field4 field5 field6 field7
謝謝大家的時間。
回答第二部分 - 將 json 文件轉換為表格。
用法:
./json_to_table.sh *.json
#!/bin/bash for i in "$@"; do file_content=$(sed -n 's/".*":"\(.*\)",\?/\1/p' "$i" | tr '\n' ' ') printf "%s %s\n" "$i" "$file_content" done | column -t
如果您不需要漂亮的表格格式,那麼您可以刪除
| column -t
部分(在底部,之後done
)。然後行的欄位將被一個空格分隔,因此,每個欄位都有自己的寬度。它適用於程序解析,例如awk
,sed
,但不方便人類閱讀。注意: json 文件中的每條記錄後,除了最後一條,都應該是逗號。我的意思是說:
"field8":"310000", <- here "field9":"si", <-here "field10":"2017-06-05" <- not here. Last record without comma. }
我會使用jq工具(一個適當的 JSON 解析/操作工具)來解決這個問題:
for f in *; do jq -R -s 'rtrimstr("\n") | split("\n") | to_entries | reduce .[] as $o ({}; .["field" + ($o.key+1|tostring)] |= $o.value )' "$f" > "$f".json; done
-R
(--raw-input
) 與-s
( ) 結合--slurp
- 將整個輸入作為單個長字元串傳遞給過濾器