Две разные ссылки на файлы в bash для циклов одновременно - PullRequest
0 голосов
/ 10 апреля 2019

Есть ли способ использовать две разные ссылки на файлы в циклах 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.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Если файлы и имена действительно называются 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 голос
/ 10 апреля 2019

Из вопроса не ясно, хотите ли вы запустить 3 итерации или 9. Если вы хотите, чтобы только 3 итерации, мне нравится формат:

while read file name; do 
  ...
done << EOF
file1 name1
file2 name2
file3 name3
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...