as7951 Ответов: 0

Awk скрипт для поиска строки на основе определенного шаблона и поиска соответствующих ей строк и построения другого выходного файла


Эксперты,
Нужна ваша поддержка для этого awk-скрипта.

у нас есть только один входной файл, все эти столбцы 1 и 2 находятся в одном файле и должны выполнять поиск значений в одном файле(столбец 1 и столбец 2), но вывод нам нужен в другом файле
Нужно grep строку, строка которой содержит 9K из столбца 1. Когда найдено совпадение, grep эту строку предположим(BGL_0BC_901_1AG_A_CASR9KTR176) и выберите соответствующие строки из столбца 2 для этой строки, совпадающей с столбцом 1.
Если столбец 2 содержит 5 строк, то выберите каждое значение по одному и выполните поиск в столбце 1 и grep соответствующих данных строки из столбца 2 и подготовьте новый выходной файл в следующем формате.
В выходном файле все строки должны начинаться со столбцов value/string, содержащих 9K


BGL_0BC_901_1AG_A_CASR9KTR176,BGL_CHT_903_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_907_1AC_B_CASR920R879


Например :

если строки в строках столбца 1 содержат 9K. Предположим, что мы находим (BGL_0BC_901_1AG_A_CASR9KTR176) в столбце 1. Теперь выберите соответствующее значение строки(BGL_KMR_919_1AC_B_CASR920R899) из столбца 2 и посмотрите в столбце 1

column1,column2
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_KMR_919_1AC_B_CASR920R899
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_CHT_903_1AC_B_CASR920R879
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_0UT_901_1AC_CASR903R551
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_YOT_919_1AC_CASR903R458
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_0BC_901_1AC_T_CASR920R504
BGL_CHT_903_1AC_B_CASR920R879,BGL_BAM_910_1AC_B_CASR920R879
BGL_BAM_910_1AC_B_CASR920R879,BGL_CHT_903_1AC_B_CASR920R879
BGL_BAM_910_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879
BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_910_1AC_B_CASR920R879
BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_912_1AC_B_CASR920R879
BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_907_1AC_B_CASR920R879
BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879
BGL_2BC_901_1AG_A_CASR9KTR124,BGL_BGM_908_1AC_CASR903R173
BGL_2BC_901_1AG_A_CASR9KTR124,BGL_ABT_932_1AC_CASR903R963
BGL_2BC_901_1AG_A_CASR9KTR124,BGL_2BC_901_1AC_T_CASR920R948
BGL_2BC_901_1AG_A_CASR9KTR124,BGL_2BC_901_1AC_T_CASR920R948
BGL_2BC_901_1AG_A_CASR9KTR124,BGL_ABT_918_1AC_CASR903R963


если значение(BGL_KMR_919_1AC_B_CASR920R899) найдено в столбце 1, то выберите соответствующее значение строки из столбца 2, а если не найдено, выведите результат в новый файл, как показано ниже

выходной файл :

BGL_0BC_901_1AG_A_CASR9KTR176,BGL_KMR_919_1AC_B_CASR920R899


Продолжая, теперь снова для(BGL_0BC_901_1AG_A_CASR9KTR176) начните и возьмите второе значение строки(BGL_CHT_903_1AC_B_CASR920R879) из столбца 2 и найдите его в столбце 1, а если найдете, выберите для него соответствующее значение строки(BGL_BAM_910_1AC_B_CASR920R879) из столбца 2


column1,column 2
BGL_CHT_903_1AC_B_CASR920R879,BGL_BAM_910_1AC_B_CASR920R879

Теперь снова найдите значение(BGL_BAM_910_1AC_B_CASR920R879) в столбце 1, Если найдено выберите для него соответствующее значение строки(BGL_BAM_912_2AC_B_CASR920R879) из столбца 2 в этом случае нам не нужно рассматривать(BGL_CHT_903_1AC_B_CASR920R879), как мы уже искали его в приведенной выше части

column 1                          column 2
BGL_BAM_910_1AC_B_CASR920R879 ,BGL_CHT_903_1AC_B_CASR920R879
BGL_BAM_910_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879


Теперь снова найдите значение строки, выбранное из столбца 2(BGL_BAM_912_2AC_B_CASR920R879) в столбце 1, и если вы нашли его для соответствующего значения столбца 2(BGL_BAM_912_1AC_B_CASR920R879), то в этом случае нам также не нужно рассматривать(BGL_BAM_910_1AC_B_CASR920R879), как мы уже искали его в приведенной выше части

BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_910_1AC_B_CASR920R879
BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_912_1AC_B_CASR920R879


Теперь снова ищем значение строки, выбранное из столбца 2(BGL_BAM_912_1AC_B_CASR920R879) в столбце 1, и если найдено значение строки, выбранное для соответствующего столбца 2(BGL_BAM_907_1AC_B_CASR920R879), то в этом случае нам также не нужно рассматривать(BGL_BAM_912_2AC_B_CASR920R879, как мы уже искали его в приведенной выше части

BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_907_1AC_B_CASR920R879
BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879


Теперь снова найдите значение строки, выбранное из столбца 2(BGL_BAM_907_1AC_B_CASR920R879) в столбце 1, и если вы не найдете соответствующего значения строки в столбце 2. остановите поиск и добавьте результат в выходной файл выше sampple в формате ниже

ТРЕБУЕМЫЙ ПРИМЕР ВЫХОДНОГО ФАЙЛА :

GL_0BC_901_1AG_A_CASR9KTR176,BGL_KMR_919_1AC_B_CASR920R899
BGL_0BC_901_1AG_A_CASR9KTR176,BGL_CHT_903_1AC_B_CASR920R879,BGL_BAM_912_2AC_B_CASR920R879,BGL_BAM_912_1AC_B_CASR920R879,BGL_BAM_907_1AC_B_CASR920R879


Аналогично grep сделано для(BGL_0BC_901_1AG_A_CASR9KTR176), нужно повторить и продолжать искать значения в других строках значений в столбце 2 в полном csv-файле и выполнять операцию, как описано выше.

Аналогично нужно выполнить операцию, как описано выше, для всех других строк, таких как BGL_2BC_901_1AG_A_CASR9KTR124, которые имеют 9K в столбце 1 в этом csv-файле.

Код я пытаюсь но dnt знает как завершить код для вышеописанного требуется

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

awk '
NR==FNR{
    assoc[$1]=$2
    next
}
FNR!=1{         
    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]
    }
}' inputfile.csv inputfile.csv > output.csv

0 Ответов