Vous voulez améliorer cette question ? Mettez à jour la question pour qu'elle soit sur le sujet de Ask Ubuntu.
Fermé il y a 3 ans.
Améliorer cette question
J'ai un dossier avec 1000 fichiers.
Leur nom est comme ci-dessous
…P1_A1 _R2….
…P1_A2 _R2….
…P1_A3 _R2….
dont seul le milieu est important comme souligné
et j'ai une clé .txt
fichier dans le même dossier avec cette information
Sample P R Col
1 1 A 1
2 1 A 2
3 1 A 3
Je veux vérifier le .txt
fichier et modifiez le nom du fichier en conséquence ou enregistrez-le avec un nom dans un autre dossier. par exemple
.._P1_A1_..
devrait être sample1
parce que quand je regarde le .txt
fichier , c'est
Sample P R Col
1 1 A 1
pour le
.._P1_A2_..
devrait être sample2
parce que quand je regarde le .txt
fichier , c'est
Sample P R Col
2 1 A 2
Réponse acceptée :
Si nous pouvons supposer en toute sécurité que tous vos noms sont uniques, je veux dire qu'il n'y a qu'un seul fichier dont le nom contient _P1_A1
, un seul avec _P1_A2
etc, vous pouvez faire ceci :
$ awk 'NR>1{print "mv *_P"$2"_"$3$4"* sample"$1}' key.txt
mv *_P1_A1* sample1
mv *_P1_A2* sample2
mv *_P1_A3* sample3
Awk lit son entrée ligne par ligne et la divise en champs sur des espaces. Donc le premier champ est $1
, le deuxième $2
etc. Ici, nous traitons le fichier de clés et imprimons le bon mv
commande en la construisant à partir des champs du fichier.
Si vous êtes sûr que le mv
commandes imprimées sont correctes, vous pouvez les exécuter avec :
awk 'NR>1{system("mv *_P"$2"_"$3$4"* sample"$1)}' key.txt