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