Обнаружение нечетных символов в больших текстовых файлах

Когда вы можете загрузить Mint через меню grub Kali, вы можете заменить grub, чтобы он указывал на Mint.

  • Загрузите Linux Mint и выполните следующие команды

  • Проверьте, работаете ли вы в режиме BIOS или в режиме UEFI. Похоже, Mint был установлен в режиме UEFI, но вы можете проверить с помощью

    test -d /sys/firmware/efi && echo efi || echo bios
    
  • Проверьте, где у вас grub.cfg. Обычно он находится в /boot/grub, что является значением по умолчанию.

    find /boot -name 'grub.cfg'
    

    Если это где-то еще, вам нужна возможность указать правильное местоположение. Подробности см. в man grub-install.

  • Установите загрузчик grub. См. следующую ссылку,

    help.ubuntu.com/community/Grub2/Installing #Переустановка _GRUB _2 _из _a _Рабочая _Система

    sudo grub-install /dev/sdX  # Example: sudo grub-install /dev/sda
    

    Эта команда работает в режиме BIOS, и теперь я проверил, что она работает и в режиме UEFI (протестировано с Lubuntu 18.04 LTS и Ubuntu 16.04.1 LTS в NUC ).

  • Затем выполните следующую команду, чтобы Mint увидел Kali (должен быть хотя бы один пункт меню для Kali в меню grub Mint ),

    sudo update-grub
    

Решение(после комментариев и чата)

Выполнение этих команд из Mint не могло перезаписать/удалить файл grubx64.efi, указывающий на Kali. Но ОП увидел это и сделал это вручную.

1
30.08.2020, 06:51
2 ответа

-n Добавляйте к каждой строке вывода префикс 1 -на основе номера строки.
-o Печатать только совпадающие части.
[^ATGC] исключить символы.

grep -no '[^ATGC]' file
11
18.03.2021, 23:08

Если у вас много файлов, и большинство из них валидны, есть действенный способ провести предварительную проверку. Просто посчитайте недопустимые символы :, если их нет, нет смысла делать более точную проверку файла. Мы используем trдля удаления действительных и wc -cдля подсчета остальных.

Для случая, когда счетчик не равен -нулю, необходимы более точные отчеты.

Я бы предложил использовать awk и определить разделитель полей FS ()как «FS=[^ATGC]+», что означает «любую последовательность символов, кроме A, T, G или C».. Если в строке нет неверных символов, то будет только одно поле.

Если существует более одного поля, мы можем использовать расширение GNU/awk для разделения (), которое предоставляет точный текст каждого разделителя полей.

#! /bin/bash

Awk='
BEGIN { FS = "[^ATGC]+"; }

function Show (tx, Local, f, c, fTxt, fSep) {
    split (tx, fTxt, FS, fSep)
    for (f = 1; f in fSep; ++f) {
        c += length (fTxt[f]);
        printf ("File %s Line %d Column %d Has :%s:\n",
            FILENAME, FNR, 1 + c, fSep[f]);
        c += length (fSep[f]);
    }
}
NF > 1 { Show( $0); }
'
    for fn in q??; do
        cc="$( tr -d 'ATGC\n' < "${fn}" | wc -c )"
        (( cc == 0 )) && { echo "$fn is OK"; continue; }
        awk "${Awk}" "${fn}"
    done

и проверить:

Paul--) head q??
==> q01 <==
TTGTAAGGTAAGTGGATTYTCCGGGRETC
TTVGGATCGTTGACCAGTK
GCCCGGGCCGGTCCTTTGGTGCGTGGGG
CTCTCCCAACCCCCCCACCCTCGACCTGAGCTCAGGCXC
BAACCCCZ

==> q02 <==
GCCCGGGCCGGTCCTTTGGTGCGTGGGG

==> q03 <==
TTGTAAGGTAAGTGGATTYTCCGGGRETC
Paul--) 
Paul--)./qFix q01 q02 q03
File q01 Line 1 Column 19 Has :Y:
File q01 Line 1 Column 26 Has :RE:
File q01 Line 2 Column 3 Has :V:
File q01 Line 2 Column 19 Has :K:
File q01 Line 4 Column 38 Has :X:
File q01 Line 5 Column 1 Has :B:
File q01 Line 5 Column 8 Has :Z:
q02 is OK
File q03 Line 1 Column 19 Has :Y:
File q03 Line 1 Column 26 Has :RE:
Paul--) 
0
18.03.2021, 23:08

Теги

Похожие вопросы