2017-04-03 18 views
5

Làm cách nào để chạy lệnh bash cho mọi đối tượng json trong một mảng json bằng jq? Cho đến nay tôi có điều này:Sử dụng lệnh jq với bash để chạy lệnh cho từng đối tượng trong mảng

cat credentials.json | jq -r '.[] | .user, .date, .email' | mycommand -u {user} -d {date} -e {email} 

Điều này dường như không hoạt động. Làm thế nào tôi có thể đưa các tham số ra khỏi mảng json vào lệnh của tôi?

tệp json của tôi trông giống như sau:

[ 
    "user": "danielrvt", 
    "date": "11/10/1988", 
    "email": "[email protected]", 
    ... 
] 

Trả lời

9

Tốt nhất có lẽ là để sản lượng mỗi bản ghi trong một cái gì đó giống như định dạng TSV, sau đó đọc mà từ một vòng vỏ.

jq -r '.[]|[.user, .date, .email] | @tsv' | 
    while IFS=$'\t' read -r user date email; do 
    mycommand -u "$user" -d "$date" -e "$email" 
    done 

jq tự nó không có bất cứ điều gì giống như một cuộc gọi system để chạy một lệnh bên ngoài từ bên trong một bộ lọc, mặc dù có vẻ như they are working on it.

2

Bạn có thể có jq đầu ra các lệnh để thực hiện, một cái gì đó giống như

.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)" 

Sau đó thực hiện nó. Một cái gì đó như

bash <(jq -r '.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)"' foo) 
Các vấn đề liên quan