Introduction
EARLY CRUMB a besoin d’une liste réellement utilisable par la personne qui prépare les sacs du samedi. Une commande payée peut être annulée, et une commande valide peut demander plusieurs articles différents. Votre travail consiste à conserver les bonnes commandes et toutes les quantités, puis à transmettre des étiquettes individuelles.
Ce nouveau laboratoire fournit tous les enregistrements originaux ainsi qu’un fichier trié des identifiants de commandes payées. Aucun fichier d’une VM précédente n’est nécessaire. Une pratique élémentaire du terminal suffit ; les commandes de sélection, de tri et de jointure sont expliquées à leur utilisation. Vous ne développez ni application ni script généraliste.
Utilisez Workstation pour les fichiers et Pickup Preview pour lire les données, ouvrir la liste réelle, consulter les étiquettes et télécharger votre transmission. L’aperçu lit seulement votre fichier : il ne retire pas les annulations et ne corrige pas les quantités.
Exclure les commandes annulées
Dans cette étape, vous créerez l’ensemble des identifiants payés et non annulés. Commencez dans Pickup Preview.
Comprendre d’abord la décision de préparation
Ouvrez Sample label pour voir comment un identifiant, un client et une quantité deviennent une étiquette utile. Ouvrez ensuite Records. P101 appartient à Alex et demande deux pains de seigle (Rye loaf) et un biscuit à l’avoine (Oat cookie). P102 appartient également à Alex, mais n’est pas payé. P103 est payé et figure dans cancellations.tsv : il ne doit pas recevoir de sac.
Paiements et annulations répondent à des questions différentes. Pour ce retrait, une commande est admissible uniquement si son statut exact est paid et si son identifiant est absent des annulations.

Examiner l’espace de travail indépendant
Passez à Workstation. pwd affiche le répertoire courant et cat affiche un fichier :
pwd
/home/labex/project/pickup
cat paid-order-ids.txt
P101
P103
P104
P105
Ce fichier trié est fourni dans ce laboratoire. Il contient les identifiants dont le statut est exactement paid, y compris P103. Lisez l’autre entrée de la décision :
cat source/cancellations.tsv
order_id
P103
Laissez source/ intact. Vous pouvez recréer les fichiers sous work/ et votre résultat final pickup-list.tsv. Si vous changez de répertoire, cd /home/labex/project/pickup vous ramène ici.
Comparer deux ensembles triés
Un ensemble est ici une liste d’identifiants distincts. comm compare deux fichiers triés. Sa première colonne contient les identifiants propres au premier fichier, la deuxième ceux propres au second et la troisième ceux communs aux deux. -23 masque les colonnes 2 et 3, ne laissant que les identifiants du premier fichier absents du second. C’est précisément l’ensemble des identifiants payés moins les identifiants annulés.
LC_ALL=C rend le tri et la comparaison cohérents dans ce terminal. tail -n +2 retire l’en-tête ; sort -u trie et supprime les lignes d’identifiants identiques. Un tube transmet la sortie à la commande suivante. > enregistre dans un fichier de travail distinct, en le remplaçant lors d’un nouvel essai ; n’utilisez jamais le chemin d’entrée comme destination.
export LC_ALL=C
sort -u paid-order-ids.txt > work/paid.sorted.txt
tail -n +2 source/cancellations.tsv | sort -u > work/cancelled-order-ids.txt
comm -23 work/paid.sorted.txt work/cancelled-order-ids.txt > work/eligible-order-ids.txt
cat work/eligible-order-ids.txt
P101
P104
P105
P103 a disparu, tandis que les autres commandes payées restent. Si un avertissement indique une entrée non triée, recréez les deux ensembles avec le réglage ci-dessus. Ne retirez pas de commandes des sources et ne considérez pas une absence de paiement comme une autorisation de préparer.
Construire la liste d’articles et ouvrir les vraies étiquettes
Dans cette étape, vous conserverez tous les produits et quantités des identifiants admissibles, puis utiliserez votre transmission réelle. Commencez dans Workstation.
Relier les identifiants à toutes les lignes d’articles
Un identifiant peut apparaître sur plusieurs lignes dans orders.tsv. P101 demande à la fois rye et oat. Trois identifiants admissibles ne signifient pas trois pièces de pain. Conservez chaque ligne d’article originale et sa quantité.
Lisez la table :
cat source/orders.tsv
Les quatre champs sont order_id, customer, item, quantity, séparés par des tabulations. La première ligne est un en-tête. tail -n +2 retire uniquement cet en-tête. TAB=$(printf '\t') enregistre une tabulation dans une variable du shell. -t "$TAB" indique ce séparateur à sort et join ; les guillemets doubles le conservent comme un seul argument. sort -k1,1 -k3,3 trie par identifiant puis par code article en gardant les quatre champs. Ne remplacez pas la table d’articles par un sort -u appliqué au seul champ d’identifiant.
TAB=$(printf '\t')
tail -n +2 source/orders.tsv > work/orders.rows
sort -t "$TAB" -k1,1 -k3,3 work/orders.rows > work/orders.sorted.tsv
join associe les premiers champs d’entrées triées. La première entrée contient les identifiants admissibles ; la seconde contient toutes les lignes d’articles. Son comportement par défaut, limité aux correspondances, convient ici : seules les commandes admissibles restent, et toutes leurs lignes correspondantes sont émises. L’identifiant apparaît une fois, suivi du nom du client, de l’article et de la quantité.
join -t "$TAB" work/eligible-order-ids.txt work/orders.sorted.tsv > work/pickup.rows
cat work/pickup.rows
P101 Alex oat 1
P101 Alex rye 2
P104 Noor oat 2
P105 Jules oat 1
P105 Jules rye 1
Les espaces visibles ci-dessus représentent des tabulations. Il y a cinq lignes d’articles pour trois commandes. Contrôlez les deux articles distincts de P101 et leurs quantités avant de publier le fichier.
Fournir un format clair au destinataire
Le lecteur attend le même en-tête de quatre champs. printf interprète \t comme une tabulation et \n comme un retour à la ligne. > démarre une nouvelle destination ; >> ajoute le contenu sans effacer l’en-tête. Répéter ces deux commandes remplace proprement la livraison précédente au lieu d’ajouter des doublons.
printf 'order_id\tcustomer\titem\tquantity\n' > pickup-list.tsv
cat work/pickup.rows >> pickup-list.tsv
cat pickup-list.tsv
Utiliser la transmission, pas seulement un total
Passez à Pickup Preview et ouvrez Pickup list. Rechargez si la page était déjà ouverte. Vous devez voir 3 collection bags · 5 item lines · 7 pieces. Ces totaux aident à repérer les erreurs, mais ne prouvent pas que chaque personne reçoit le bon contenu.
Ouvrez l’étiquette P101 d’Alex : elle doit indiquer Oat cookie 1 et Rye loaf 2. Suivez All collection bags, ouvrez P104 et confirmez Oat cookie 2 pour Noor ; P105 donne à Jules Oat cookie 1 et Rye loaf 1. P102, P103 et P106 ne doivent avoir aucun sac. Les noms seuls ne permettent pas d’établir ces relations.
Utilisez Print label pour ouvrir la boîte de dialogue d’impression si votre navigateur le permet, puis annulez après l’aperçu. Aucune imprimante physique n’est nécessaire. Revenez à la liste et choisissez Download the actual list. Vous téléchargez le TSV que vous avez créé, pas une référence précalculée.
Si l’aperçu explique une erreur de format, vérifiez l’en-tête et les tabulations dans Workstation, recréez le fichier et rechargez. Si les quantités sont fausses, comparez work/pickup.rows à la source des commandes. Le lecteur ne corrige pas votre travail en silence.
Ajouter une commande tardive sans dupliquer les sacs précédents
Dans cette étape, vous reconstruirez la transmission à partir d’un instantané révisé complet. Commencez dans Workstation, avec les mêmes réglages de shell qu’auparavant.
Comprendre la nouvelle entrée
Les fichiers originaux sous source/ restent inchangés. source/late/ contient un instantané ultérieur complet des trois tables, pas quelques lignes à ajouter au résultat. Une nouvelle commande payée P107 appartient à Aya et demande deux biscuits à l’avoine (Oat cookie). L’annulation précédente reste applicable.
cat source/late/orders.tsv
cat source/late/payments.tsv
Le fichier fourni paid-order-ids.txt décrit l’instantané original. Pour inclure la nouvelle commande, calculez un nouvel ensemble payé à partir de la table de paiement ultérieure. grep $'\tpaid$' sélectionne une tabulation suivie du statut exact en fin de ligne, sans accepter unpaid ; cut -f1 conserve l’identifiant. sort -u prépare l’ensemble pour la comparaison. Gardez LC_ALL=C et TAB des étapes précédentes ; restaurez-les ici si vous avez reconnecté le terminal.
export LC_ALL=C
TAB=$(printf '\t')
tail -n +2 source/late/payments.tsv | grep $'\tpaid$' | cut -f1 | sort -u > work/paid.sorted.txt
tail -n +2 source/late/cancellations.tsv | sort -u > work/cancelled-order-ids.txt
comm -23 work/paid.sorted.txt work/cancelled-order-ids.txt > work/eligible-order-ids.txt
Vous venez d’appliquer la même règle à un nouvel instantané complet. Reconstruisez maintenant l’entrée d’articles et la destination :
tail -n +2 source/late/orders.tsv > work/orders.rows
sort -t "$TAB" -k1,1 -k3,3 work/orders.rows > work/orders.sorted.tsv
join -t "$TAB" work/eligible-order-ids.txt work/orders.sorted.tsv > work/pickup.rows
printf 'order_id\tcustomer\titem\tquantity\n' > pickup-list.tsv
cat work/pickup.rows >> pickup-list.tsv
cat pickup-list.tsv
Vous devez obtenir six lignes d’articles : les cinq précédentes plus P107/Aya/oat/2. L’en-tête apparaît une seule fois. Reconstruire à partir de l’instantané complet signifie que vous ne rajoutez pas toutes les anciennes lignes.
Contrôler la véritable nouvelle transmission
Passez à Pickup Preview, ouvrez Pickup list et rechargez. Attendez 4 collection bags · 6 item lines · 9 pieces. Ouvrez P107 et confirmez les deux biscuits à l’avoine (Oat cookie) d’Aya. Rouvrez P101 et contrôlez que ses deux lignes sont toujours correctes. P103 annulé et P102 impayé n’ont toujours pas d’étiquette.

Téléchargez à nouveau la liste réelle et comparez son contenu à la transmission révisée. La page Records conserve volontairement l’instantané original pour le contexte ; les entrées ultérieures sont les fichiers lus sous source/late/. Une ancienne page en cache ne prouve pas l’échec des commandes : rechargez avant de comparer.
Si les totaux ont doublé, revenez aux deux commandes d’écriture : > doit créer un nouvel en-tête avant que >> ajoute les lignes actuelles. Si P107 manque, vérifiez que paiements et articles viennent tous deux de source/late/. Corrigez les fichiers de travail et régénérez ; n’inscrivez jamais le total attendu à la place des vraies lignes de commandes.
Résumé
Vous avez comparé des ensembles triés d’identifiants, relié les commandes admissibles à toutes leurs lignes d’articles et produit une vraie liste de retrait et des étiquettes. Vous avez reconstruit le même processus sur un instantané ultérieur complet sans dupliquer les sacs précédents. Le défi indépendant des ateliers utilise les mêmes méthodes avec d’autres relations d’admissibilité et d’autres matériaux.



