подсчет нескольких шаблонов в единственной передаче с grep?

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

id3v2 --remove-frame "COMM" --remove-frame "PRIV" -s *.mp3

Для выполнения этой команды в файлах MP3 в подкаталогах также работать

id3v2 --remove-frame "COMM" --remove-frame "PRIV" -s **/*.mp3

**/*.mp3 соответствия .mp3 файлы в текущем каталоге и его подкаталогах рекурсивно. Если Ваша оболочка является zsh, **/ работы из поля. Если Ваша оболочка является ударом ≥4, необходимо работать shopt -s globstar сначала (вставляет эту строку Ваш ~/.bashrc). В ksh необходимо работать set -o globstar (вставьте его ~/.kshrc). Если у Вас есть другая оболочка, или если эта попытка перестала работать с сообщением, говоря Вам, что командная строка является слишком большой, необходимо будет использовать find метод ниже (с вариантами, такими как данные в других ответах).

Более сложное, но более гибкий и больше портативного способа действовать на файлы в каталоге и его подкаталогах рекурсивно find команда:

find . -type f -name '*.mp3' -exec id3v2 --remove-frame "COMM" --remove-frame "PRIV" -s {} +

Команда после -exec выполняется с {} + бит в конце, замененном путями к соответствию файлам. Если необходимо выполнить несколько id3v2 команды, используйте несколько -exec директивы:

find . -type f -name '*.mp3' -exec id3v2 --remove-frame "COMM" {} + -exec id3v2 --remove-frame "PRIV" {} + -exec id3v2 -s {} +
5
11.02.2014, 23:04
1 ответ
IFS=$'\n'
gzip -dc file.gz | grep -v '^>' | grep -Foe "${tri[*]}" | sort | uniq -c

Но между прочим, AAAC соответствия оба AAA и AAC, но grep -o произведет только одного из них. Это то, что Вы хотите? Кроме того, сколько случаев AAA в AAAAAA? 2 или 4 ([AAA]AAA, A[AAA]AA, AA[AAA]A, AAA[AAA])?

Возможно, Вы хотите вместо этого:

gzip -dc file.gz | grep -v '^>' | fold -w3 | grep -Fxe "${tri[*]}" | sort | uniq -c

Это разделяется строки в группах из 3 символов, и рассчитайте, случаи как сплошные линии (нашел бы 0 возникновения AAA в ACAAATTCG (как это ACA AAT TCG)).

Или с другой стороны:

gzip -dc file.gz | awk '
  BEGIN{n=ARGC;ARGC=0}
  !/^>/ {l = length - 2; for (i = 1; i <= l; i++) a[substr($0,i,3)]++}
  END{for (i=1;i<n;i++) printf "%s: %d\n", ARGV[i], a[ARGV[i]]}' "${tri[@]}"

(нашел бы 4 случаев AAA в AAAAAA).

4
27.01.2020, 20:40
  • 1
    благодарит, я протестирую это теперь. Это - положительные стороны, мой предыдущий цикл считал бы AAA и AAC, но был предназначен к количеству 2 AAA не 4 в AAAAAA. Но теперь Вы упоминаете это, они кажутся несовместимыми со мной. Я попытаюсь протестировать Ваши предложения для получения поведения, в котором я нуждаюсь. Большое спасибо снова. –  Stephen Henderson 11.02.2014, 15:18
  • 2
    Еще раз спасибо на это на самом деле больше, чем отвечают мой первый вопрос и спешило ко всем видам разных подходов. Я голосовал бы больше, если я мог :) –  Stephen Henderson 11.02.2014, 15:38

Теги

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