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 '...'