Skip to content

LONDON | DONARA BLANC | MODULE TOOLS | SPRINT 2 | JQ exercises #44

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions jq/script-01.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,5 @@ set -euo pipefail
# The input for this script is the person.json file.
# TODO: Write a command to output the name of the person.
# Your output should be exactly the string "Selma", but should not contain any quote characters.
jq -r .'name' person.json
Selma
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is useful to see the output produced, but we'd generally avoid putting this directly in a shell script, as it causes the script to no longer run, e.g.

% ./script-01.sh
Selma
./script-01.sh: line 9: Selma: command not found

If you're going to include the output, I'd recommend doing so in a comment (i.e. putting a # before the output) so that the scripts can still run :)

3 changes: 3 additions & 0 deletions jq/script-02.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,6 @@ set -euo pipefail
# The input for this script is the person.json file.
# TODO: Write a command to output the address of the person, all on one line, with a comma between each line.
# Your output should be exactly the string "35 Fashion Street, London, E1 6PX", but should not contain any quote characters.
jq -r '.address | join (",")' person.json

35 Fashion Street,London,E1 6PX
2 changes: 2 additions & 0 deletions jq/script-03.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,5 @@ set -euo pipefail
# The input for this script is the person.json file.
# TODO: Write a command to output the name of the person, then a comma, then their profession.
# Your output should be exactly the string "Selma, Software Engineer", but should not contain any quote characters.
q -r '[.name, .profession] | join (",")' person.json
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like something went slightly wrong in your copy+paste here?

But this raises an interesting workflow question - there are two ways you can go about making this kind of script - you can work in the terminal then copy+paste into the file, or work in the file and run the file each time you want to try something out. How do you feel about the two? What are the advantages/disadvantages of each way of working?

Selma,Software Engineer
7 changes: 7 additions & 0 deletions jq/script-04.sh
Original file line number Diff line number Diff line change
@@ -6,3 +6,10 @@ set -euo pipefail
# TODO: Write a command to output just the names of each player, one per line.
# Your output should contain 6 lines, each with just one word on it.
# Your output should not contain any quote characters.
jq -r '.[].name' scores.json
Ahmed
Basia
Mehmet
Leila
Piotr
Chandra
8 changes: 8 additions & 0 deletions jq/script-05.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,11 @@ set -euo pipefail
# The input for this script is the scores.json file.
# TODO: Write a command to output the names of each player, as well as their city.
# Your output should contain 6 lines, each with two words on it.
jq -r '.[] | "\(.nam
e) \(.city)"' scores.json
Comment on lines +8 to +9
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How did you end up with a newline in the middle of your command here? (Same for script-06 and script-07, script-10, and script-11)?

Ahmed London
Basia London
Mehmet Birmingham
Leila London
Piotr Glasgow
Chandra Birmingham
8 changes: 8 additions & 0 deletions jq/script-06.sh
Original file line number Diff line number Diff line change
@@ -6,3 +6,11 @@ set -euo pipefail
# TODO: Write a command to output just the names of each player along with the score from their first attempt.
# Your output should contain 6 lines, each with one word and one number on it.
# The first line should be "Ahmed 1" with no quotes.
jq -r '.[] | "\(.nam
e) \(.scores[0])" ' scores.json
Ahmed 1
Basia 22
Mehmet 3
Leila 1
Piotr 15
Chandra 12
8 changes: 8 additions & 0 deletions jq/script-07.sh
Original file line number Diff line number Diff line change
@@ -6,3 +6,11 @@ set -euo pipefail
# TODO: Write a command to output just the names of each player along with the score from their last attempt.
# Your output should contain 6 lines, each with one word and one number on it.
# The first line should be "Ahmed 4" with no quotes.
jq -r '.[] | "\(.name) \(.scores[-1])" ' scor
es.json
Ahmed 4
Basia 6
Mehmet 17
Leila 1
Piotr 8
Chandra 6
7 changes: 7 additions & 0 deletions jq/script-08.sh
Original file line number Diff line number Diff line change
@@ -6,3 +6,10 @@ set -euo pipefail
# TODO: Write a command to output just the names of each player along with the number of times they've played the game.
# Your output should contain 6 lines, each with one word and one number on it.
# The first line should be "Ahmed 3" with no quotes.
jq -r '.[] | "\(.name) \(.scores | length)"' scores.json
Ahmed 3
Basia 3
Mehmet 3
Leila 1
Piotr 5
Chandra 2
7 changes: 7 additions & 0 deletions jq/script-09.sh
Original file line number Diff line number Diff line change
@@ -6,3 +6,10 @@ set -euo pipefail
# TODO: Write a command to output just the names of each player along with the total scores from all of their games added together.
# Your output should contain 6 lines, each with one word and one number on it.
# The first line should be "Ahmed 15" with no quotes.
jq -r '.[] | "\(.name) \(.scores | add)"' scores.json
Ahmed 15
Basia 37
Mehmet 32
Leila 1
Piotr 61
Chandra 18
3 changes: 3 additions & 0 deletions jq/script-10.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,6 @@ set -euo pipefail
# The input for this script is the scores.json file.
# TODO: Write a command to output the total of adding together all players' first scores.
# Your output should be exactly the number 54.
jq -r '[.[].scores[0
]] | add' scores.json
54
3 changes: 3 additions & 0 deletions jq/script-11.sh
Original file line number Diff line number Diff line change
@@ -5,3 +5,6 @@ set -euo pipefail
# The input for this script is the scores.json file.
# TODO: Write a command to output the total of adding together all scores from all games from all players.
# Your output should be exactly the number 164.
jq -r '[.[].scores[]
] | add' scores.json
164