grep для нескольких regexes и количество количество происшествий

Вы хотите использовать dirname $file получить имя каталога Вашего входного файла и предварительно ожидать это к выходному имени файла.

for file in $(find ./ -name "*.nii")
do
rawdata = $(dirname $file)/rawdata.nii
fslroi $file $rawdata 0 33
gunzip $rawdata.gz -f
fslroi $rawdata rawnodif 0 1
bet rawnodif rawnodif_brain -m -g 0.2 -f 0.3
fslmaths rawnodif -mas rawnodif_brain_mask rawnodif_brain
gunzip rawnodif_brain_mask.nii.gz -f
done

Это неясно который из rawdata фактические аргументы команды или если все - имена файлов. То же с rawnodif_brain_mask который Вы, возможно, должны были бы адаптировать таким же образом.

6
31.12.2014, 15:47
3 ответа

Имея такую же проблему, я не могу монтировать внешний том защищенным-скрытым, но я могу монтировать как незащищенный хорошо, но я могу легко завинтить свои скрытые данные из-за этого.

Если я пытаюсь подключить его защищенным я получаю эту ошибку от монтирования:

mount: wrong fs type, bad option, bad superblock on /dev/mapper/tmp.000,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

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

Однако для этого я нашел один обходной путь, сразу после того, как вы сопоставили устройство, защищенное с помощью tcplay Я использовал mkfs для создания файловой системы, после чего оно было установлено нормально, а скрытый том остался нетронутым.

Но есть проблема с таким подходом, допустим, вы создадите контейнер 10Mb, с 6Mb скрытым томом, при создании файловой системы после активировать защиты скрытого тома вы получите 4Mb том, и это покажет, как 4Mb, даже если вы монтируете внешний том, это должно показать 10Mb, так что у нас будет проблема с правдоподобной отрицаемостью, каково использование скрытого тома, если нельзя скрыть используемое пространство для скрытого тома

-121--114613-

Intel MacBook Pro использует таблицу разделов GUID для разбиения диска, которую можно редактировать с помощью gdisk .

Копия метаданных таблицы разделов обычно хранится как резервная копия основного файла. Более подробную информацию об этом можно найти в Arch Wiki здесь

Необходимо сначала узнать имя устройства, /dev/sda , /dev/sdb вашего диска Mac.
Для определения точного имени можно использовать команды blkid , lsblk или dmesg .

В Ubuntu Live USB используйте gdisk/dev/sdX (где X - имя устройства)

например ,/dev/sdb (при условии, что USB задан sda, а Mac является единственным другим диском)

$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): `r`

Recovery/transformation command (? for help): `b` 

Recovery/transformation command (? for help): `w`

И перезагрузка

b восстанавливает резервную таблицу разделов GUID и w записывает ее на диск

Вы путь хотите запустить v verify после восстановления резервной таблицы и перед записью на диск. gdisk очень благоразумно относится к созданию и изменению таблицы разделов в памяти, и ничего не записывается на диск, пока не будет записана команда w . Убедитесь, что вы довольны результатом восстановления, прежде чем записать его на диск.

-121--146078-

Вероятно, awk будет самым быстрым инструментом оболочки здесь. Вы можете попробовать:

awk "/$regex1/ { ++r1 }
     /$regex2/ { ++r2 }"'
     END { print "regex1:",r1 "\nregex2:",r2 }' <infile

Конечно, если вам нужно использовать perl регулярные выражения, как ваш вопрос, то на самом деле perl является единственным ответом. Однако awk использует расширенные выражения (например, grep -E ) в отличие от базовых.

5
27.01.2020, 20:24

Самое быстрое решение, которое я могу подумать, это Flex . Ниже приведен непроверенный скелет:

%{
  int count[1000];
%}
%%

regex0  {count[0]++; }
regex1  {count[1]++; }
...
.|\n    {}

%%
int main(){
   yylex();
   // printf the counts;
}

Flex делает довольно хорошую работу в оптимизации автоматов и генерирует быстрый C-код.

Вы должны перекомпилировать его, если изменение Regexs ...

Редактировать : Если вы реализуете и попробуете какие-либо решения, было бы интересно увидеть время.

4
27.01.2020, 20:24

В случае, если Python является опцией, вы можете сначала Memory-map файл, а затем запустить инкрементальный регрессионный поиск по нему, воспользовавшись именованными группами , чтобы посчитать происшедшие паттерны. Данное решение терпимо для больших размеров файла

from collections import Counter
import re, mmap, contextlib
c = Counter()
with open('data_file', 'r+') as f:
    with contextlib.closing(mmap.mmap(f.fileno(), 0)) as data:
            for m in re.finditer(r'(?P<pat1>regex1)|(?P<pat2>regex2)|(?P<pat3>regex3)',data):
                    c.update(k for (k, v) in m.groupdict().iteritems() if v)

print c.most_common()
[('pat3', 3), ('pat1', 2), ('pat2', 2)]
1
27.01.2020, 20:24

Теги

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