Запрос из файла с использованием awk - PullRequest
1 голос
/ 12 января 2011

У меня есть файл из 6 столбцов:
$ cat data1.txt

123711184642,02,3583090366663629,639f02,292,14292
123715942138,01,3538710295145500,639f02,45014,50755
123711616258,02,3548370476972758,639f02,72,22322
123726139528,02,3532810125937435,639f02,8,3562

У меня есть второй файл (data2) из ​​3 столбцов

64340,5616,abc  
64341,5616,def  
64342,5616,ghi  
64344,5616,hjk  
64345,5616,lmn  
64346,5616,opq  

Мне нужночтобы сравнить последний столбец data1 с 1-м или 2-м столбцом data2.Если есть совпадение, выходной файл data3 будет иметь 3-е поле data2.Eg:

123711184642,02,3583090366663629,639f02,292,14292,abc
123715942138,01,3538710295145500,639f02,45014,50755,def
123711616258,02,3548370476972758,639f02,72,22322,ghi
123726139528,02,3532810125937435,639f02,8,3562,lmn

Спасибо.

Bernie

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Предполагая, что второй файл является небольшим поисковым файлом, а первый файл - большим файлом данных:

#!/usr/bin/awk -f
BEGIN {
    FS = OFS = ","
}

NR == FNR {
    lookup1[$1] = lookup2[$2] = $3
    next
}

{
    if (lookup1[$NF]) {
        $(NF+1) = lookup1[$NF]
        print
    }
    else if (lookup2[$NF]) {
        $(NF+1) = lookup2[$NF]
        print
    }
}

Для его запуска:

$ ./script.awk data2.txt data1.txt

Используя это как data2.txt:

14292,333,zzz
555,777,nnn
222,22322,xxx
111,444,yyy

и data1.txt из вашего вопроса, результат:

123711184642,02,3583090366663629,639f02,292,14292,zzz
123711616258,02,3548370476972758,639f02,72,22322,xxx
0 голосов
/ 12 января 2011

объедините две таблицы в соответствующих полях, а затем напечатайте последнее поле результата, используя awk

Чтобы найти совпадения в первом поле файла 2:

join -1 76 -2 1 -t, data1.txt data2.txt | awk `BEGIN{FS=","}{print($NF)}`

Затем сопоставьте второе поле файла 2 и объедините два набора результатов:

join -1 76 -2 2 -t, data1.txt data2.txt | awk `BEGIN{FS=","}{print($NF)}`

Глава 4 из Язык программирования AWK действительно хорошо подходит для такого рода задач, включая написание версии join в AWK, если она недоступна в вашей системе.

...