You can use the Linux Bash core utility split:
split -b 1M -d file.txt file
Note that M or MB both are OK but size is different. MB is 1000 * 1000, M is 1024^2
If you want to separate by lines you can use -l parameter.
Update:
a=(`wc -l yourfile`) ; lines=`echo $(($a/12)) | bc -l` ; split -l $lines -d file.txt file
Another solution as suggested by Kirill, you can do something like the following
split -n l/12 file.txt
Note that is l not one, split -n has a few options, like N, k/N, l/k/N, r/N, r/k/N.
Using Bash:
readarray -t lines < file.txt
count=${#lines[@]}
for i in "${!lines[@]}"; do
index=$(( (i * 12 - 1) / count + 1 ))
echo "${lines[i]}" >> "file${index}.txt"
done
Using AWK:
awk '{
a[NR] = $0
}
END {
for (i = 1; i in a; ++i) {
x = (i * 12 - 1) / NR + 1
sub(/\..*$/, "", x)
print a[i] > "file" x ".txt"
}
}' file.txt
Unlike split, this one makes sure that the number of lines are most even.