as7951 Ответов: 0

AWK скрипт для поиска строки на основе шаблона и поиска соответствующих ей строк в столбце


Эксперты,
Нужна ваша поддержка для этого awk-скрипта. у нас есть только один входной файл, все эти столбцы 1 и 2 находятся в одном файле и должны выполнять поиск значений в одном файле(столбец 1 и столбец 2), но вывод нам нужен в другом файле
Нужно grep строку, строка которой содержит 9K в столбце 1, а затем grep соответствующую ей строку в столбце 2. Предположим, проверьте 9K1, затем grep A1, проверьте A1 в столбце 1, если нет, выведите результат, как показано ниже ожидаемого выходного файла
Затем снова проверьте наличие 9K1, grep A2, найдите A2 в столбце 1, Если найдено grep его соответствующее значение строки B2.
Теперь проверьте значение B2 в столбце 1, а затем grep для C2 вместо A2, как мы уже рассматривали ранее в lookup. Теперь найдите C2 в столбце и grep D2 вместо B2

Это необходимо проверить для всех строк в столбце 1, содержащих 9K, так как в столбце 1 могут быть строки со значением 9K2, 9K3, 9K4 с соответствующими данными в столбце 2




Входной файл :
9K1,A1
9K1,A2
9K1,A3
9K1,A4 
9K1,A5 
A2,B2
B2,A2
B2,C2
C2,B2
C2,D2
A5,B5
B5,C5
B5,A5
9K1,A6
A6,B6
B6,A6
B6,C6


Ниже приведен требуемый и ожидаемый вывод, который необходим(другой файл) :

9K1,A1
9K1,A2,B2,C2,D2
9K1,A3
9K1,A4
9K1,A5,B5,C5
9K1,A6,B6,C6


Вывод, возвращаемый приведенным выше кодом: (что не соответствует ожиданиям)
9K1,A3
9K1,A4
9K1,A5
9K1,A6,B6,C6


Что я уже пробовал:

awk '
NR==FNR{
    assoc[$1]=$2
    next
}
(FNR!=1)&&($1~/9K/){
    printf "%s,%s", $1,$2
    seen[$1]; seen[$2]
    search=$2
    while((search in assoc) && !(assoc[search] in seen)){
        search=assoc[search]
        printf ",%s", search
        seen[search]
    }
    print ""
    for(var in seen){
         delete seen[var]
    }
}' input.csv input.csv > output.csv

0 Ответов