PATTERNS=(dummy pattern1 pattern2 ... pattern14) ; dummy to occupy index zero
for file in /path/to/my/files/*
do
for p in 1 2 3 4 5 6 7 8 9 10 11 12 13 14
printf ${file}"\t"
do
c=$(grep -c PATTERNS[${p}] ${file}) # depending on the nature of your pattern you may need quotes around it
printf ${c}"\t"
done
echo
done
может сработать что-то вроде этого (не проверено на синтаксис, пожалуйста, будьте осторожны, если решите использовать это)
Как вы сказали, выборочное тестирование небольшого файла, похоже, дает то, что вы хотите, но если вы хотите быть в безопасности, лучшим вариантом будет запись во временный файл, а затем замена нового файла в:
#!/bin/bash
scratch=$(mktemp)
trap 'rm -f "$scratch"' EXIT
if [[ -r "$1" ]]; then
shuf "$1" --output "$scratch" && mv "$scratch" "$1"
fi
Приведенный выше сценарий можно сохранить как e. грамм. shuf_in_place
в вашем ПУТИ
.
Да - согласно документации - перетасовка файла на месте должна быть безопасной:
-o output-file
- output = output-file
Записать вывод в файл вывода вместо стандартного вывода.shuf
считывает весь ввод перед открытием файла вывода , поэтому вы можете безопасно перетасовать файл на месте, используя такие команды, какshuf -o F
и кот F | shuf -o F
.