Usando awk :
$ awk -v num="$num" 'NR == num { print $NF }' data.in
Teste:
$ num=3
$ awk -v num="$num" 'NR == num { print $NF }' data.in
two
O script awk lê o registro do arquivo de entrada por registro (um registro é, por padrão, uma linha). Depois de atingir o registro correspondente à variável num , ele imprime o último campo desse registro (um campo é, por padrão, uma coluna separada por espaço em branco).
A variável num dentro do script awk é uma variável awk que inicializamos com o valor da variável do shell num com -v num="$num" na linha de comando.
NR é o número do registro atual e NF é o número de campos nesse registro. $NF são os dados do último campo.
Se o seu arquivo estiver estritamente separado por vírgula, adicione -F ',' à linha de comando:
$ awk -v num="$num" -F ',' 'NR == num { print $NF }' data.in
Com grep você não pode selecionar uma linha específica, mas junto com sed você pode filtrar a linha desejada e depois obter o último bit após a última vírgula:
$ sed -n "${num}p" data.in | grep -o '[^,]*$'
O sed bit obterá a linha especificada enquanto o grep bit extrairá tudo após a última vírgula nessa linha.
Você também pode fazer isso com sed :
$ sed -n "${num}s/^.*,\(.*\)$//p" data.in
Aqui, a substituição é aplicada somente à linha cujo número é $num e substitui toda a linha pelo conteúdo da linha após a última vírgula e gera o resultado. Todas as outras saídas são inibidas com a chave de linha de comando -n .
Como alternativa, use uma substituição em sed para simplesmente excluir tudo na linha até a última vírgula:
$ sed -n "${num}s/^.*,//p" data.in