有没有一种方法可以同时在for循环中使用两个不同的文件引用?像这样:
for file in file1 file2 file3; for name in name1 name2 name3
do
awk 'FNR==NR{a[$1];next};($1 in a)' ${file}.txt ${name}.txt > ${name}_extract.txt
done
我也尝试了一个嵌套的for循环,该循环无效:
for file in file1 file2 file3
do
for name in name1 name2 name3
do
awk 'FNR==NR{a[$1];next};($1 in a)' ${file}.txt ${name}.txt > ${name}_extract.txt
done
done
我要实现的是从“ file1.txt”和“ name1.txt”中提取与其第一列匹配的行。反之亦然,file2.txt / name2.txt和file3.txt / name3.txt。
答案 0 :(得分:2)
如果文件和名称确实称为file1
,file2
,file3
和name1
,name2
和name3
,则可以做这样的事情:
for i in {1..3}; do
printf '%s\n' "file: file$i, name: name$i"
done
您可以根据需要替换printf
语句-重要的是如何访问文件和名称。
但是,如果它们具有任意名称,则必须执行以下操作:准备两个数组,然后遍历索引:
files=(file1 file2 file3)
names=(name1 name2 name3)
for (( i = 0; i < ${#files[@]}; ++i )); do
printf '%s\n' "file: ${files[i]}, name: ${names[i]}"
done
答案 1 :(得分:1)
从这个问题出发,目前尚不清楚是要运行3次迭代还是9次。假设只需要运行3次迭代,我喜欢这种格式:
while read file name; do
...
done << EOF
file1 name1
file2 name2
file3 name3
EOF