디렉터리의 하위 디렉터리를 반복하면서 두 개의 파일을 awk 스크립트에 대한 인수로 가져와야 합니다. 이 스크립트는 두 파일을 비교하고 추가 파일을 생성합니다.
나는 이것을 가지고있다. 하지만 매개변수 파일로 awk 스크립트가 필요합니다. ".*1.txt" 및 ".*2.txt"
for i in words/*/*1.txt words/*/*2.txt
do
awk -f corpus_vs_flexion.awk "$i"
done
그것은 다음과 같습니다:
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
답변1
좋습니다. 파일 이름이 쌍으로 오면 다음을 사용할 수 있습니다.
for f in words/*/*1.txt ; do awk -f corpus_vs_flexion.awk "$f" "${f%1.txt}2.txt" ; done
이 "${f%1.txt}2.txt"
문구는 "파일 이름을 사용 "$f"
하되 끝 부분을 제거 1.txt
하고 끝 부분을 추가 2.txt
"를 의미합니다.
답변2
나는 bash 책을 읽고 있었고 나에게 필요한 것을 찾았습니다!
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
답변3
파일 검색이 철저하고 다른 파일과 일치하지 않는다고 확신할 수 있는 경우 for
루프를 잃고 명령 대체를 사용하여 단순화하십시오 find
.
awk -f corpus_vs_flexion.awk $(find /path/to/your/dir -name "*.txt" -type f | tr '\n' ' ')
^^^^^^^^^^^^^^^^^ Put your dir here
답변4
나는 Ralph의 답변을 좋아합니다. 이것은 또한 작동할 수 있습니다(테스트되지 않음)
find. -name '*[12].txt' -print0 | xargs -0 -n 2 awk '...'