我需要遍历目录的子目录并获取其中两个文件作为 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 '...'