Primeiro de tudo, você não executará um loop sobre esses dados: Por que usar um loop de shell para processar texto considerado má prática?
Se as únicas vírgulas no arquivo forem as vírgulas que delimitam os campos,
sort -t ',' -k3n -o file.output file.input
ordenaria os dados numericamente no número na terceira coluna. A saída seria gravada em file.output
.
Para os dados fornecidos, file.output
seria parecido com
Jennifer Lelan,Childhood dreams,97546766544237
Adam Barry,The Armies,97564325678855
Donald Smith,Fire Lands,97868545414459
Para processar ainda mais esses dados, pode-se considerar o uso de um programa awk
. Como você não especificou o tipo de processamento que gostaria de fazer, o seguinte apenas extrai os dados em variáveis (não realmente necessárias) para cada linha e as imprime:
sort -t ',' -k3n file.input |
awk -F ',' '{ author=$1; title=$2; isbn=$3;
printf("Author: %s\nTitle: %s\nISBN: %s\n",
author, title, isbn) }'
Observe que, nesse caso, não é necessário armazenar os dados classificados em um arquivo intermediário.
O resultado dado os dados na pergunta:
Author: Jennifer Lelan
Title: Childhood dreams
ISBN: 97546766544237
Author: Adam Barry
Title: The Armies
ISBN: 97564325678855
Author: Donald Smith
Title: Fire Lands
ISBN: 97868545414459
Para colocar os dados em colunas com boa aparência e com traços no número ISBN, você não precisa de awk
. Os usos a seguir são sed
para a formatação dos números ISBN e column
para formatar as colunas:
sort -t ',' -k3n file.input |
sed -E -e 's/,([0-9]{3})([0-9]{4})([0-9]{5})/,---/' |
column -s ',' -t
A saída será
Jennifer Lelan Childhood dreams 975-4676-65442-37
Adam Barry The Armies 975-6432-56788-55
Donald Smith Fire Lands 978-6854-54144-59
Observe que os números do ISBN parecem um pouco complicados. Isso é porque eles têm 14 dígitos. Os números ISBN Real têm 10 ou 13 dígitos , e o código acima assume que eles são 13 dígitos (ou pelo menos 12 dígitos).
Para adicionar cabeçalhos de colunas:
sort -t ',' -k3n file.input |
{ echo 'Author,Name of book,ISBN'
sed -E -e 's/,([0-9]{3})([0-9]{4})([0-9]{5})/,---/'
} |
column -s ',' -t
Que produz
Author Name of book ISBN
Jennifer Lelan Childhood dreams 975-4676-65442-37
Adam Barry The Armies 975-6432-56788-55
Donald Smith Fire Lands 978-6854-54144-59
... não usando loops explícitos no shell.