From 1c25b6171b0b8ceee24e57476c4b18b35d14063c Mon Sep 17 00:00:00 2001 From: miriamjorna Date: Fri, 31 Jul 2026 17:56:29 +0100 Subject: [PATCH 1/5] Sprint 2 jq exercises --- jq/script-01.sh | 1 + jq/script-02.sh | 1 + jq/script-03.sh | 1 + jq/script-04.sh | 1 + jq/script-05.sh | 1 + jq/script-06.sh | 1 + jq/script-07.sh | 1 + jq/script-08.sh | 1 + jq/script-09.sh | 1 + jq/script-10.sh | 1 + jq/script-11.sh | 2 ++ 11 files changed, 12 insertions(+) diff --git a/jq/script-01.sh b/jq/script-01.sh index 95827f688..cf8c92bc2 100755 --- a/jq/script-01.sh +++ b/jq/script-01.sh @@ -5,3 +5,4 @@ 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 diff --git a/jq/script-02.sh b/jq/script-02.sh index 21544d67b..35f0c24b0 100755 --- a/jq/script-02.sh +++ b/jq/script-02.sh @@ -5,3 +5,4 @@ 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 diff --git a/jq/script-03.sh b/jq/script-03.sh index 3566f03ba..27083f3ee 100755 --- a/jq/script-03.sh +++ b/jq/script-03.sh @@ -5,3 +5,4 @@ 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. +jq -r '[.name, .profession] | join(", ")' ./person.json diff --git a/jq/script-04.sh b/jq/script-04.sh index 015997e18..5636938bf 100755 --- a/jq/script-04.sh +++ b/jq/script-04.sh @@ -6,3 +6,4 @@ 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 diff --git a/jq/script-05.sh b/jq/script-05.sh index 993fc9ee3..5d425dab9 100755 --- a/jq/script-05.sh +++ b/jq/script-05.sh @@ -5,3 +5,4 @@ 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 '.[] | [.name, .city] | join(" ")' ./scores.json diff --git a/jq/script-06.sh b/jq/script-06.sh index 8b6e74c52..cac2e4232 100755 --- a/jq/script-06.sh +++ b/jq/script-06.sh @@ -6,3 +6,4 @@ 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 '.[] | [.name, .scores[0]] | join(" ")' ./scores.json diff --git a/jq/script-07.sh b/jq/script-07.sh index d43f93d1b..938c68f24 100755 --- a/jq/script-07.sh +++ b/jq/script-07.sh @@ -6,3 +6,4 @@ 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]] | join(" ")' ./scores.json diff --git a/jq/script-08.sh b/jq/script-08.sh index 6671fd1ba..531c4a059 100755 --- a/jq/script-08.sh +++ b/jq/script-08.sh @@ -6,3 +6,4 @@ 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)] | join(" ")' ./scores.json diff --git a/jq/script-09.sh b/jq/script-09.sh index c2536a536..8b19e37dd 100755 --- a/jq/script-09.sh +++ b/jq/script-09.sh @@ -6,3 +6,4 @@ 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)] | join(" ")' ./scores.json diff --git a/jq/script-10.sh b/jq/script-10.sh index 8e9d75f07..6724e8344 100755 --- a/jq/script-10.sh +++ b/jq/script-10.sh @@ -5,3 +5,4 @@ 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 diff --git a/jq/script-11.sh b/jq/script-11.sh index d2337a6b2..51cd37555 100755 --- a/jq/script-11.sh +++ b/jq/script-11.sh @@ -5,3 +5,5 @@ 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] | add' ./scores.json + From 466aa161fbe44ae71a74e528ac6fca709e2882e4 Mon Sep 17 00:00:00 2001 From: miriamjorna Date: Fri, 31 Jul 2026 23:12:38 +0100 Subject: [PATCH 2/5] Spr2 shellpipelines ls-grep --- shell-pipelines/ls-grep/script-01.sh | 1 + shell-pipelines/ls-grep/script-02.sh | 1 + shell-pipelines/ls-grep/script-03.sh | 1 + shell-pipelines/ls-grep/script-04.sh | 1 + 4 files changed, 4 insertions(+) diff --git a/shell-pipelines/ls-grep/script-01.sh b/shell-pipelines/ls-grep/script-01.sh index 8c7d968a2..a2c3983a6 100755 --- a/shell-pipelines/ls-grep/script-01.sh +++ b/shell-pipelines/ls-grep/script-01.sh @@ -4,3 +4,4 @@ set -euo pipefail # TODO: Write a command to output the names of the files in the sample-files directory whose name contains at least one upper case letter. # Your output should contain 11 files. +ls ./sample-files | grep '[A-Z]' diff --git a/shell-pipelines/ls-grep/script-02.sh b/shell-pipelines/ls-grep/script-02.sh index 16f5f71d9..644879434 100755 --- a/shell-pipelines/ls-grep/script-02.sh +++ b/shell-pipelines/ls-grep/script-02.sh @@ -4,3 +4,4 @@ set -euo pipefail # TODO: Write a command to output the names of the files in the sample-files directory whose name starts with an upper case letter. # Your output should contain 10 files. +ls ./sample-files | grep '^[A-Z]' diff --git a/shell-pipelines/ls-grep/script-03.sh b/shell-pipelines/ls-grep/script-03.sh index a302ab036..845aa10a8 100755 --- a/shell-pipelines/ls-grep/script-03.sh +++ b/shell-pipelines/ls-grep/script-03.sh @@ -4,3 +4,4 @@ set -euo pipefail # TODO: Write a command to output the names of the files in the sample-files directory whose name starts with an upper case letter and doesn't contain any other upper case letters. # Your output should contain 7 files. +ls ./sample-files | grep '^[A-Z][^A-Z]*$' diff --git a/shell-pipelines/ls-grep/script-04.sh b/shell-pipelines/ls-grep/script-04.sh index c000b7e3b..1555d0ebe 100755 --- a/shell-pipelines/ls-grep/script-04.sh +++ b/shell-pipelines/ls-grep/script-04.sh @@ -4,3 +4,4 @@ set -euo pipefail # TODO: Write a command to count the number of files in the sample-files directory whose name starts with an upper case letter and doesn't contain any other upper case letters. # Your output should be the number 7. +ls ./sample-files | grep '^[A-Z][^A-Z]*$' -c From 789495f96ab9a9842a7866760c031101d910e69b Mon Sep 17 00:00:00 2001 From: miriamjorna Date: Fri, 31 Jul 2026 23:49:48 +0100 Subject: [PATCH 3/5] Spr2 shellpipelines sort --- shell-pipelines/sort-uniq-head-tail/script-01.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-02.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-03.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-04.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-05.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-06.sh | 1 + shell-pipelines/sort-uniq-head-tail/script-07.sh | 1 + 7 files changed, 7 insertions(+) diff --git a/shell-pipelines/sort-uniq-head-tail/script-01.sh b/shell-pipelines/sort-uniq-head-tail/script-01.sh index 171e1f989..845ad89da 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-01.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-01.sh @@ -5,3 +5,4 @@ set -euo pipefail # The input for this script is the scores-table.txt file. # TODO: Write a command to output scores-table.txt, with lines sorted by the person's name. # The first line of your output should be "Ahmed London 1 10 4" (with no quotes). And the third line should be "Chandra Birmingham 12 6". +sort scores-table.txt diff --git a/shell-pipelines/sort-uniq-head-tail/script-02.sh b/shell-pipelines/sort-uniq-head-tail/script-02.sh index 29c3c2524..33f6d1618 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-02.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-02.sh @@ -5,3 +5,4 @@ set -euo pipefail # The input for this script is the scores-table.txt file. # TODO: Write a command to output scores-table.txt, with lines sorted by the person's first score, descending. # The first line of your output should be "Basia London 22 9 6" (with no quotes). +sort -nr -k 3 scores-table.txt diff --git a/shell-pipelines/sort-uniq-head-tail/script-03.sh b/shell-pipelines/sort-uniq-head-tail/script-03.sh index bcbaf3420..a2551a914 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-03.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-03.sh @@ -8,3 +8,4 @@ set -euo pipefail # Basia London 22 9 6 # Piotr Glasgow 15 2 25 11 8 # Chandra Birmingham 12 6 +sort -nr -k 3 scores-table.txt | head -n 3 diff --git a/shell-pipelines/sort-uniq-head-tail/script-04.sh b/shell-pipelines/sort-uniq-head-tail/script-04.sh index 65a5cfba8..475ece0c7 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-04.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-04.sh @@ -5,3 +5,4 @@ set -euo pipefail # The input for this script is the scores-table.txt file. # TODO: Write a command to output scores-table.txt, with shows the line for the player whose first score was the second highest. # Your output should be: "Piotr Glasgow 15 2 25 11 8" (without quotes). +sort -nr -k 3 scores-table.txt | head -n 2 |tail -n 1 diff --git a/shell-pipelines/sort-uniq-head-tail/script-05.sh b/shell-pipelines/sort-uniq-head-tail/script-05.sh index a93cd9f9d..8eba57e36 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-05.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-05.sh @@ -6,3 +6,4 @@ set -euo pipefail # TODO: Write a command to show a list of all events that have happened, without duplication. # The order they're displayed doesn't matter, but we never want to see the same event listed twice. # Your output should contain 6 lines. +sort events.txt | uniq diff --git a/shell-pipelines/sort-uniq-head-tail/script-06.sh b/shell-pipelines/sort-uniq-head-tail/script-06.sh index 715c7ae5c..e2fc1be4a 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-06.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-06.sh @@ -5,3 +5,4 @@ set -euo pipefail # The input for this script is the events.txt file. # TODO: Write a command to show how many times anyone has entered and exited. # It should be clear from your script's output that there have been 5 Entry events and 4 Exit events. +awk '{print $1}' events.txt | sort | uniq -c diff --git a/shell-pipelines/sort-uniq-head-tail/script-07.sh b/shell-pipelines/sort-uniq-head-tail/script-07.sh index 7fd07e1ff..07b5d927a 100755 --- a/shell-pipelines/sort-uniq-head-tail/script-07.sh +++ b/shell-pipelines/sort-uniq-head-tail/script-07.sh @@ -6,3 +6,4 @@ set -euo pipefail # TODO: Write a command to show how many times anyone has entered and exited. # It should be clear from your script's output that there have been 5 Entry events and 4 Exit events. # The word "Event" should not appear in your script's output. +tail +2 events-with-timestamps.txt | awk '{print $3}' | sort | uniq -c From c40dc19593bd7d6adbebac9b8fce0940207f14fa Mon Sep 17 00:00:00 2001 From: miriamjorna Date: Fri, 31 Jul 2026 23:55:47 +0100 Subject: [PATCH 4/5] Spr2 shellpipelines tr --- shell-pipelines/tr/script-01.sh | 1 + shell-pipelines/tr/script-02.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/shell-pipelines/tr/script-01.sh b/shell-pipelines/tr/script-01.sh index 8bb0211e9..75c3ed25f 100755 --- a/shell-pipelines/tr/script-01.sh +++ b/shell-pipelines/tr/script-01.sh @@ -6,3 +6,4 @@ set -euo pipefail # The author got feedback that they're using too many exclamation marks (!). # # TODO: Write a command to output the contents of text.txt with every exclamation mark (!) replaced with a full-stop (.). +cat text.txt | tr '!' '.' diff --git a/shell-pipelines/tr/script-02.sh b/shell-pipelines/tr/script-02.sh index cf3a503a2..f8c4121cb 100755 --- a/shell-pipelines/tr/script-02.sh +++ b/shell-pipelines/tr/script-02.sh @@ -7,3 +7,4 @@ set -euo pipefail # so every Y should be a Z, and every Z should be a Y! # # TODO: Write a command to output the contents of text.txt with every Y and Z swapped (both upper and lower case). +cat text.txt | tr 'yzYZ' 'zyZY' From 39b8894ab715041a293d96c7c18a85df0efad21a Mon Sep 17 00:00:00 2001 From: miriamjorna Date: Sat, 1 Aug 2026 00:03:43 +0100 Subject: [PATCH 5/5] taking jq out of this branch --- jq/script-01.sh | 1 - jq/script-02.sh | 1 - jq/script-03.sh | 1 - jq/script-04.sh | 1 - jq/script-05.sh | 1 - jq/script-06.sh | 1 - jq/script-07.sh | 1 - jq/script-08.sh | 1 - jq/script-09.sh | 1 - jq/script-10.sh | 1 - jq/script-11.sh | 2 -- 11 files changed, 12 deletions(-) diff --git a/jq/script-01.sh b/jq/script-01.sh index cf8c92bc2..95827f688 100755 --- a/jq/script-01.sh +++ b/jq/script-01.sh @@ -5,4 +5,3 @@ 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 diff --git a/jq/script-02.sh b/jq/script-02.sh index 35f0c24b0..21544d67b 100755 --- a/jq/script-02.sh +++ b/jq/script-02.sh @@ -5,4 +5,3 @@ 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 diff --git a/jq/script-03.sh b/jq/script-03.sh index 27083f3ee..3566f03ba 100755 --- a/jq/script-03.sh +++ b/jq/script-03.sh @@ -5,4 +5,3 @@ 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. -jq -r '[.name, .profession] | join(", ")' ./person.json diff --git a/jq/script-04.sh b/jq/script-04.sh index 5636938bf..015997e18 100755 --- a/jq/script-04.sh +++ b/jq/script-04.sh @@ -6,4 +6,3 @@ 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 diff --git a/jq/script-05.sh b/jq/script-05.sh index 5d425dab9..993fc9ee3 100755 --- a/jq/script-05.sh +++ b/jq/script-05.sh @@ -5,4 +5,3 @@ 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 '.[] | [.name, .city] | join(" ")' ./scores.json diff --git a/jq/script-06.sh b/jq/script-06.sh index cac2e4232..8b6e74c52 100755 --- a/jq/script-06.sh +++ b/jq/script-06.sh @@ -6,4 +6,3 @@ 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 '.[] | [.name, .scores[0]] | join(" ")' ./scores.json diff --git a/jq/script-07.sh b/jq/script-07.sh index 938c68f24..d43f93d1b 100755 --- a/jq/script-07.sh +++ b/jq/script-07.sh @@ -6,4 +6,3 @@ 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]] | join(" ")' ./scores.json diff --git a/jq/script-08.sh b/jq/script-08.sh index 531c4a059..6671fd1ba 100755 --- a/jq/script-08.sh +++ b/jq/script-08.sh @@ -6,4 +6,3 @@ 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)] | join(" ")' ./scores.json diff --git a/jq/script-09.sh b/jq/script-09.sh index 8b19e37dd..c2536a536 100755 --- a/jq/script-09.sh +++ b/jq/script-09.sh @@ -6,4 +6,3 @@ 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)] | join(" ")' ./scores.json diff --git a/jq/script-10.sh b/jq/script-10.sh index 6724e8344..8e9d75f07 100755 --- a/jq/script-10.sh +++ b/jq/script-10.sh @@ -5,4 +5,3 @@ 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 diff --git a/jq/script-11.sh b/jq/script-11.sh index 51cd37555..d2337a6b2 100755 --- a/jq/script-11.sh +++ b/jq/script-11.sh @@ -5,5 +5,3 @@ 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] | add' ./scores.json -