Попробуйте:
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
Каждая архитектура говорит на своем собственном аппаратном языке, поэтому, конечно, процессоры ARM могут запускать только двоичные файлы ARM. Если вы хотите запускать двоичные файлы для другой архитектуры, вам нужно использовать эмулятор . Наиболее известными эмуляторами x86 -64 являются qemu и bochs
.Но эмуляция работает очень медленно, поэтому она не подходит для приложений, -чувствительных ко времени, и должна использоваться в крайнем случае. Вам лучше перекомпилировать исходный код, если он доступен, или найти альтернативное программное обеспечение ARM
.Debian имеет поддержку нескольких архитектур , что означает, что вы можете устанавливать и запускать программы, созданные для одной архитектуры, на других архитектурах.
Однако вам необходимо принять во внимание следующее:
Поскольку архитектура x86 сильно отличается от архитектуры ARM, это будет выполняться посредством эмуляции (, обычно через qemu-user
), что может привести к некоторой потере скорости и функциональности.
Это требует binfmt
поддержки. Если вы используете «контейнеры Linux» (crostinit )на Chromebook, то, как объяснено в этом сообщении , эта поддержка не включена.
На 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
.