LINUX.ORG.RU

Подскажите пожалуйста как решить задачу выборки нужной информации из текстового фала на отснове списка

 , , ,


0

1

Есть список файлов необходимо выбрать из url ссылок на файлы (тоже текстовый файл вида

http://онлайн/путь/к/деб/файлу1/для/скачивания
...
http://онлайн/путь/к/деб/файлуN/для/скачивания 

Те ссылки на файлы которые есть в списке файлов вида

файл1.deb
...
файлM.deb

Причем M <>N т.е количество файлов в списке меньше числа ссылок на деб файлы иными словами требуется для каждого файла из списка файлов найти соответствующую для него ссылку из числа ссылок и записать в отдельный файл Пробвал сделать так

grep -Ff $(</путь/к/файлу/со/списком/файловdeb) /путь/к/файлу/со/списком/ссылок > /файл/результат

Ничего не вышло результирующий файл пуст кто-нибудь подскажите как скорректировать запрос.


#include <stdio.h>
#include <string.h>
#include <assert.h>

void extract(FILE * list_links,FILE * list_files)
{
    char link[2048]={0};
    char file[2048]={0};

    while(fgets(file,sizeof(file),list_files))
    {
        file[strlen(file)-1]='\0';
        while(fgets(link,sizeof(link),list_links))
        {
           link[strlen(link)-1]='\0';
           if(strstr(link,file))
           {
               printf("%s\n",link);
           }
           memset(link,0,sizeof(link));
        }
        memset(file,0,sizeof(file));
        fseek(list_links,0,SEEK_SET);
    }
    fseek(list_links,0,SEEK_SET);
    fseek(list_files,0,SEEK_SET);
}

int main(int argc, char *argv[])
{
   assert(argv[1]);
   assert(argv[2]);
   FILE * links = fopen(argv[1],"r");
   FILE * files = fopen(argv[2],"r");
   assert(links);
   assert(files);
   extract(links,files);
   fclose(links);
   fclose(files);
   return 0;
}

links.txt

http://онлайн1/путь/к/деб/app_1.deb/для/скачивания
http://онлайн2/путь/к/деб/app_2.deb/для/скачивания
http://онлайн3/путь/к/деб/app_2.deb/для/скачивания
http://онлайн4/путь/к/деб/app_3.deb/для/скачивания
http://онлайн3/путь/к/деб/app_4.deb/для/скачивания
http://онлайн4/путь/к/деб/app_5.deb/для/скачивания

files.txt

app_1.deb
app_2.deb
app_5.deb
dron@gnu:~$ gcc main.c 
dron@gnu:~$ ./a.out links.txt files.txt 
http://онлайн1/путь/к/деб/app_1.deb/для/скачивания
http://онлайн2/путь/к/деб/app_2.deb/для/скачивания
http://онлайн3/путь/к/деб/app_2.deb/для/скачивания
http://онлайн4/путь/к/деб/app_5.deb/для/скачивания
dron@gnu:~$ 

LINUX-ORG-RU ★★★★★
()

Вариант на awk:

$ cat urls
http://domain.com/test/test1.deb
http://domain.com/test/test2.deb
http://domain.com/test/test3.deb
http://domain.com/test/test4.deb
http://domain.com/test/test5.deb

$ cat files
test2.deb
test4.deb

$ awk 'NR==FNR{a[$1];next} {for(i in a){if($0 ~ i "$") print}}' files urls
http://domain.com/test/test2.deb
http://domain.com/test/test4.deb

iron ★★★★★
()