Ok, je pense que je comprends un peu mieux.
Il me semble qu'il faudrait procéder en deux temps :
- identifier les préfixes de noms de fichiers présents dans le répertoire (gen, mat, jo1, kg2, …) : pour cela, il faut bien se mettre d'accord sur le critère permettant d'isoler ces préfixes ;
- concaténer les fichiers pour chaque préfixe.
Pour le premier point, au vu de ce que tu as dit jusque-là, je dirais que le critère pour isoler les préfixes est que les noms de fichiers se terminent toujours par ce motif regex :
[0-9]{3}.txt
Donc, je propose de stocker tout d'abord ces préfixes dans un tableau par la commande suivante :
mapfile -td '' a < <(find . -type f -name '*[0-9][0-9][0-9].txt' -printf '%f\0' | awk 'BEGIN{RS="\0"} {sub("[0-9]{3}.txt$","")} !a[$0]{a[$0]=1; printf("%s\0",$0)}')
Cette commande est à exécuter dans le répertoire où se trouvent les fichiers, ou alors il faut modifier le répertoire de base pour
find.
Ensuite, il suffit de boucler sur les éléments du tableau pour les concaténations :
for p in "${a[@]}"; do cat "$p"[0-9][0-9][0-9].txt >"$p.txt"; done
De même, cette commande est à exécuter dans le répertoire où se trouvent les fichiers, ou alors il faut modifier un peu pour généraliser.