サブディレクトリに移動し、awkスクリプトの引数として2つのファイルを取得します。

サブディレクトリに移動し、awkスクリプトの引数として2つのファイルを取得します。

ディレクトリのサブディレクトリを繰り返しながら、2つのファイルをawkスクリプトの引数としてインポートする必要があります。このスクリプトは2つのファイルを比較し、追加ファイルを生成します。

私はこれを持っています。ただし、パラメータファイルとして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

私はラルフの答えが好きです。これも機能します(テストされていません)

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

関連情報