하위 디렉터리를 탐색하고 awk 스크립트에 대한 인수로 두 개의 파일을 가져옵니다.

하위 디렉터리를 탐색하고 awk 스크립트에 대한 인수로 두 개의 파일을 가져옵니다.

디렉터리의 하위 디렉터리를 반복하면서 두 개의 파일을 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 '...'

관련 정보