Bonjour / Bonsoir,
je cherche à afficher uniquement la première occurrence des lignes contenant mon motif qui contient lui-même une variable qui s'incrémente au sein d'une boucle for. Ça, c'est mon but final, clair et précis. Sachez qu'à force de chercher, chercher, chercher sur Internet, j'ai trouvé un moyen de faire, mais en ayant recours à des concepts que je ne comprends pas toujours, bien que le code final soit très simple, et c'est cela qui me dérange. Je souhaite trouver la solution la plus simple possible, si possible sans sortir du domaine de 'grep', 'sed', 'awk' et 'cut'.
Partie 1 : Voilà, j'ai actuellement ces lignes :
zone1;ligne1;
zone1;ligne2;
zone1;ligne3;
zone2;ligne1;
zone2;ligne2;
zone3;ligne1;
J'ai réussi à avoir ce que je voulais, c'est-à-dire, ceci :
zone1;ligne1;
zone2;ligne1;
zone3;ligne1;
Pour ce faire, non je n'ai pas fait un grep avec un motif "ligne1" parce que je voulais une solution qui fonctionne si la syntaxe des lignes dans mon fichier n'était pas respecté et ainsi donc que je me retrouvais sans certaines lignes. J'ai trouvé ça comme solution :
for i in $(grep "^zone" test2.txt | cut -d ";" -f1 | sort -u);
do
LC_ALL=C grep -m1 "$i" test2.txt;
done
Partie 2 : Le souci est que ce petit "LC_ALL=C", même en faisant des recherches sur Internet, est rempli de concepts que je ne saisis pas et je ne souhaite pas écrire un programme contenant du code que je ne maîtrise pas. Ainsi donc je recherche une alternative à cette solution, de préférence en utilisant uniquement au maximum grep, sed, cut et awk. Auriez-vous donc une idée de comment m'y prendre, en gardant mon code aussi propre et compréhensible que possible (méthode KISS) ?