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