Можно ли запустить исполняемый файл x86 на ARM?

Попробуйте:

awk 'NR%2==0 && length($0)!=last{print "Bad pair at lines",NR-1,"and",NR} {last=length($0)}' file

Пример

Возьмем это как тестовый файл:

$ cat file
good123
good345
bad12
bad123
good_again
good_also1

С помощью нашей команды несопоставленная пара идентифицируется правильно:

$ awk 'NR%2==0 && length($0)!=last{print "Bad pair at lines",NR-1,"and",NR} {last=length($0)}' file
Bad pair at lines 3 and 4

Как это работает

  • NR%2==0 && length($0)!=last{print "Bad pair at lines",NR-1,"and",NR}

    Когда мы находимся на четной строке, NR%2==0, мы проверяем, совпадает ли длина строки с предыдущей строкой. Если это не то же самое, length($0)!=last, мы печатаем сообщение.

  • last=length($0)

    Это сохраняет длину текущей строки в переменной last.

Многострочная версия

Для тех, кто предпочитает разбивать код на несколько строк:

awk '
    NR%2==0 && length($0)!=last {
        print "Bad pair at lines",NR-1,"and",NR
    }

    {
        last=length($0)
    }' file

Как напечатать определенные строки из файла

Чтобы напечатать, например, строку 3 из файла, мы можем использовать:

$ awk 'NR==3' file
bad12

Чтобы напечатать диапазон, скажем, все строки с 3 по 6, мы можем использовать:

$ awk 'NR>=3 && NR<=6' file
bad12
bad123
good_again
good_also1

Кроме того, мы можем получить аналогичные результаты от sed, используя:

$ sed -n '3p' file
bad12
$ sed -n '3,6p' file
bad12
bad123
good_again
good_also1

Использование нефильтрованных входных данных

Рассмотрим этот входной файл:

$ cat File
@sample1
CGGCATCGTTTATGGTTGAGACTAGGACG
+
AAAAAEEEEEEEEEEEEEEEEEEEEEEEE
@sample2
CCGGCTTCCGGTTCATCCCGCATCGCCAGTTC
+
@sample3
AAAA6E6/EEEEEEEE6/EE/EEAEEAA//E/
+
@sample4
ATTTCGGGGGGGGGGGGGG
+
??????????????????????????????????
@Sample5
GGTTAGCGCGCAGTTGGGCACCGTAACCCGGCTT
+
AAAAAEEEEEAEEEEEEEEEEEEEEEEEE//<EE
@sample6
CTAACCTGTCTCACGACGGTCTAAACCCAGCTCA
+
AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
@sample7
CTAACCTGTCTCACGACGGTCTAAACCCAGCTCA
+
AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEE

Мы можем обнаружить плохие выборки, то есть выборки с неравной длиной строки или вторыми строками, начинающимися с ?, следующим образом:

$ awk '/^\+/{next} /^@/{s=$0;n=NR;next} prev{if(/^\?/ || length(prev)!=length($0)) printf "Sample %s (line %s) is bad:\n%s\n%s\n",s,n,prev,$0;prev="";next} {prev=$0}' File
Sample @sample4 (line 11) is bad:
ATTTCGGGGGGGGGGGGGG
??????????????????????????????????
Sample @sample7 (line 23) is bad:
CTAACCTGTCTCACGACGGTCTAAACCCAGCTCA
AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEE

В качестве альтернативы, если мы хотим игнорировать сэмплы, у которых вторая (строка «качество» )начинается с ?, тогда:

$ awk '/^\+/{next} /^@/{s=$0;n=NR;next} prev{if(!/^\?/ && length(prev)!=length($0)) printf "Sample %s (line %s) is bad:\n%s\n%s\n",s,n,prev,$0;prev="";next} {prev=$0}' File
Sample @sample7 (line 23) is bad:
CTAACCTGTCTCACGACGGTCTAAACCCAGCTCA
AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEE
5
04.04.2020, 22:23
3 ответа

Каждая архитектура говорит на своем собственном аппаратном языке, поэтому, конечно, процессоры ARM могут запускать только двоичные файлы ARM. Если вы хотите запускать двоичные файлы для другой архитектуры, вам нужно использовать эмулятор . Наиболее известными эмуляторами x86 -64 являются qemu и bochs

.

Но эмуляция работает очень медленно, поэтому она не подходит для приложений, -чувствительных ко времени, и должна использоваться в крайнем случае. Вам лучше перекомпилировать исходный код, если он доступен, или найти альтернативное программное обеспечение ARM

.
5
28.04.2021, 23:18

Для aarch64 новые проекты, такие как FEX или Box64 , имеют лучшую производительность, чем эмуляция пользователя QEMU. Они используют динамическую перекомпиляцию, а также обычно обеспечивают поддержку WINE для программного обеспечения Win32 x86/x86 _64.

3
05.09.2021, 05:30

Debian имеет поддержку нескольких архитектур , что означает, что вы можете устанавливать и запускать программы, созданные для одной архитектуры, на других архитектурах.

Однако вам необходимо принять во внимание следующее:

  1. Поскольку архитектура x86 сильно отличается от архитектуры ARM, это будет выполняться посредством эмуляции (, обычно через qemu-user), что может привести к некоторой потере скорости и функциональности.

  2. Это требует binfmtподдержки. Если вы используете «контейнеры Linux» (crostinit )на Chromebook, то, как объяснено в этом сообщении , эта поддержка не включена.

  3. На Chromebook для поддержки binfmtна данный момент требуется crouton. Он работает так, как и можно было ожидать в этом контексте.

Если вы хотите проверить это, выполните следующее:

а. Установите двоичные файлы, необходимые для поддержки архитектуры.

sudo apt-get install binfmt-support qemu-user-static
sudo update-binfmts --display

б. Настройте Debian для поддержки мультиархитектуры.

sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get upgrade

с. Проверьте это. (Предположим, что у вас еще не установлен пакет helloдля архитектуры aarch64.)

sudo apt-get install hello:amd64
hello

Будет напечатано знакомое "Hello, World!" сообщение с использованием двоичного файла amd64.

2
05.09.2021, 09:25

Теги

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