遍历子目录并获取两个文件作为 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

我喜欢拉尔夫的回答。这也可能有效(未经测试)

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

相关内容