сравните два файла и получите данные

READ будет блокировать, пока данные не будут доступен, и напишите заблокируют или выйдут, чтобы пройти полную трубу. Там мало параметров, таких как Pipe_buf , Pipe_size и O_NONBLOCK , которые играют ключевую роль в трубе.

Значение PIPE_BUF можно определить через «Ulimit -a». Это определено в пределах. Pipe_buf управляет гарантированным размером для атомных напитков . Это помогает в создании безопасных многопоточных приложений.

Pipe_size зависит от размера страницы. В 2,4 ядре он был эквивалентен размеру одной страницы (4 КБ). Однако версии после 2,6 сопоставлены на массив 16 страниц (64 КБ). Это определяется в файле Pipe_fs_i.h Как Pipe_Buffers (16). Последние версии ядра имеют FCNTL с F_SetPipe_SZ Включить увеличение размера страницы.

О O_NONBLOCK позволяет выполнять частичные и отложенные записи. Тем не менее, если O_NONBLOCK включен, но если количество байтов будет записано в трубе, больше, чем Pipe_buf, то запись не пройдет неудачу в трубу, если они заполнены, остальные на основе возвращаемого значения записи, он будет перемежен с данными из других процессов. Отказ

0
14.05.2015, 08:11
2 ответа

с последующим программой :

awk '
  BEGIN             { FS = "([[:space:]]+|[|])" }
  NR==FNR           { id[$1] ; next }
  /^>>/ && $2 in id { data = $2 ; f = 1 }
  f && /^[0-9]/     { data = data " : " $10 " " $11 }
  f && !NF          { f = 0 ; print data }
' FileB FileA

Вы получите этот вывод:

AT5G46880.1 : 317 555
AT1G73360.1 : 230 457 : 544 566

: Я добавил второй идентификатор в Fileb, чтобы вы могли видеть, как будут обрабатываться несколько линий атрибута.

Как работает программа программа :

Начало - Полевой сепаратор определяется так, что мы можем позже Esily доступ к идентификатору от линий, начиная с «>>».

NR == FNR - это шаблон, который верно при чтении первого файла; идентификаторы хранятся.

/ ^ >> / && $ 2 в ID - мы подходим строки с идентификаторами и проверьте, было ли нашел идентификатор запоминается из первого файла. ID сохраняется для вывода и установлен флаг обработки.

F && / ^ [0-9] / - Если флаг установлен, и мы сопоставляем строку, начинающуюся с цифры, мы добавляем соответствующие поля 10 и 11 на выходные данные (разделенные толстой кишкой).

F &&! NF - Если флаг установлен, и обнаружена пустая строка, обработка выполняется для этого блока, и флаг очищен.

4
28.01.2020, 02:20

Проблема не была оболочкой или ЧБ или что-то экзотическое. Это был глупый псевдонимы на местном. Кто-то подумал, что это хорошая идея, чтобы создать псевдоним, который отображает локальный IP-адрес, и назвал его «локальным», поэтому линия

local cword words=()

не удалась не потому, что оболочка не может обрабатывать массивы. Он не удался, потому что псевдоним расширяется и () там не имеет смысла.

-121--209859-

Попробуйте

grep -A4 -f <(sed 's/^/^>> /' fileB) fileA | 
    sed -r '/^>>/! s/(\S+\s+){8}((\S+\s+){3}).*/\2/
            s/[][>.-]*\s*//'
0
28.01.2020, 02:20

Теги

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