Para o seu caso 2, isso pode ser feito no Bash, por exemplo, salve o arquivo abaixo como split :
#!/usr/bin/env bash
# Usage: ./split 'data.txt' 'value'
paired=( )
value="$2"
while read -a paired
do
[[ ${paired[1]} < $value ]] &&
echo "${paired[@]}" >> lessthan.txt ||
echo "${paired[@]}" >> morethan.txt
done < "$1"
# end file
Observe que a variável emparelhada é uma matriz. Usando read -a paired lê cada linha em uma matriz de pares, baseada em zero, então o elemento 1 é o número de interesse em cada linha. O argumento 2 a split é o valor a ser usado para divisão.
Para o seu Caso 1, não tenho certeza do que você está querendo fazer, mas é possível modificar o acima para que, ao ler cada linha do arquivo, você possa enviar a coluna 1 ${paired[0]}
ou coluna 2 ${paired[1]}
para qualquer arquivo que você desejar, dependendo do valor da coluna 2.