Рейтинг:-3

Как отсортировать строки файла как матрицу?

флаг us

Я хотел бы знать, как я могу сортировать строки файла следующим образом:

Мой файл file.txt (с разделителями табуляции):

g1 00A98_01563 00554_01552 CCUG38_01373 
g2 00554_01444
g3 00A98_04566 CCUG38_05322

Я хочу получить это (разделитель табуляции):

г 00A98 00554 CCUG38
г1 1 1 1
g2 0 1 0
g3 1 0 1

И/или также в этом формате (разделители табуляцией):

г 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373 
g2 00554_01444 
g3 00A98_04566 CCUG38_05322

Как я могу сделать это с помощью командной строки с помощью sort, awk, grep или другого?

Всего наилучшего, С уважением

24601 avatar
флаг in
прочитайте [спросите] и [отредактируйте] свой вопрос с информацией о том, что вы пробовали, и как это относится к ubuntu. Выглядит неожиданно, как вопрос домашнего задания
флаг cn
то, что вы хотите, является функцией электронных таблиц. Таким образом, https://www.google.com/sheets/about/ или libreoffice будут инструментом для использования.
The_Bioinformatic_BATMAN avatar
флаг us
Перечислено, отредактировано!
Рейтинг:4
флаг hr

С использованием Миллер, обработайте входные данные как разделительные пары ключ-значение с TAB в качестве разделителя входных полей и символом подчеркивания в качестве разделителя входных пар, а в качестве вывода задайте TSV. Тогда ты можешь неразреженный ваши данные

$ mlr --idkvp --ifs tab --ips '_' --otsv неразрезать файл.txt
1 00A98 00554 CCUG38
g1 01563 01552 01373
g2 01444
g3 04566 05322

Затем вы можете добавить различные преобразования, например.

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify --fill-with 0 then put '
    for(k,v in mapexcept($*,"1")){if(v != 0){$[k] = 1}}
  ' затем переименуйте файл "1","g".txt
г 00A98 00554 CCUG38
г1 1 1 1
g2 0 1 0
g3 1 0 1

или же

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify затем поставить -S '
    for(k,v in mapexcept($*,"1")){if(v != ""){$[k] = k ."_". v}}
  ' затем переименуйте файл "1","g".txt
г 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373
g2 00554_01444
g3 00A98_04566 CCUG38_05322

В последнем случае выравнивание выглядит «отключенным», но вывод с --ocsv на месте --tsv должен подтвердить, что это правильно.

The_Bioinformatic_BATMAN avatar
флаг us
спасибо большое бро! вы избавили меня от головной боли!
Рейтинг:2
флаг cn

Это toMatrix.awk

#!/usr/bin/env gawk -f
НАЧАЛО {FS = OFS = "\t"}

{
    для (я=2; я<=НФ; я++) {
        х=$я
        под(/_.*/, "", х)
        если (!(x в значениях)) {
            значения [х] = 1
            упорядоченное [++ значение] = х
        }
        г[NR] = $1
        данные[NR][x]=1
    }
}

КОНЕЦ {
    printf "%s", "g"
    для (я = 1; я <= значение; я ++)
        printf "%s%s", OFS, заказано[i]
    Распечатать ""

    для (nr = 1; nr <= NR; nr++) {
        printf "%s", г[номер]
        для (я = 1; я <= значение; я ++)
            printf "%s%s", OFS, 0 + data[nr][ordered[i]]
        Распечатать ""
    }
}
$ gawk -f toMatrix.awk файл.txt
г 00A98 00554 CCUG38
г1 1 1 1
g2 0 1 0
g3 1 0 1
The_Bioinformatic_BATMAN avatar
флаг us
Большое спасибо, братан! ты избавил меня от головной боли!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.