Itération dans les sous-directorys et obtention de deux files en tant qu'arguments pour le script awk

J'ai besoin de parcourir les sous-directorys d'un directory et de prendre deux des files, en tant qu'arguments d'un script awk. Le script compare les deux files et génère d'autres files.

J'ai ça. Mais j'ai besoin de script awk à prendre comme un file d'arguments. ". * 1.txt" et ". * 2.txt"

for i in words/*/*1.txt words/*/*2.txt do awk -f corpus_vs_flexion.awk "$i" done 

Quelque chose comme:

 awk -f corpus_vs_flexion.awk .*1.txt .*2.txt # Taking them from each subdirectory in words/* Directory words/ subdirectory Peter/ whatever.txt whatever1.txt whatever.txt whatever.txt whatever2.txt subdirectory Blas/ whatever1.txt whatever.txt whatever.txt whatever.txt whatever2.txt ........./ ..... .. For each subdirectory loop: awk -f corpus_vs_flexion.awk whatever1.txt whatever2.txt 

Ok, avec les noms de files apparaissant dans les paires correspondantes, vous pouvez utiliser ce qui suit:

 for f in words/*/*1.txt ; do awk -f corpus_vs_flexion.awk "$f" "${f%1.txt}2.txt" ; done 

La phrase "${f%1.txt}2.txt" dit "utiliser le nom de file "$f" mais supprimer la fin 1.txt et append la fin 2.txt place".

J'ai lu un livre bash, et j'ai trouvé ce dont j'avais besoin!

 typ1_files=(words/*/*1.txt) typ2_files=(words/*/*2.txt) for ((i=0;i<=${#typ1_files[@]};i++)); do awk -f corpus_vs_flexion.awk "${typ1_files[i]}" "${typ2_files[i]}" done 

Si vous pouvez être sûr que votre search de files est exhaustive et ne correspond pas à d'autres files, simplifiez en perdant la boucle for et utilisez simplement une substitution de command avec find .

 awk -f corpus_vs_flexion.awk $(find /path/to/your/dir -name "*.txt" -type f | tr '\n' ' ') ^^^^^^^^^^^^^^^^^ Put your dir here 

J'aime la réponse de Ralph. Cela pourrait également fonctionner (non testé)

 find. -name '*[12].txt' -print0 | xargs -0 -n 2 awk '...'