O CaseWorkerName
é a coluna 11. O utilitário sort
pode ser informado de qual coluna classificar e qual delimitador usar ao especificar colunas:
$ sort -t ',' -k11,11 data.in
Isto dirá a sort
para usar vírgulas como delimitadores e ordenar na coluna 11 a 11 com base na ordem lexicográfica ascendente (ou seja, apenas na coluna 11).
A saída é gravada no console. Se você quiser armazenar a saída em outro arquivo, use
$ sort -t ',' -k11,11 -o data.out data.in
Não há problema em especificar data.in
como arquivo de saída se você usar o -o
flag para fazer isso.
Se você deseja evitar a classificação da primeira linha (pode conter os cabeçalhos das colunas), primeiro devemos separar o cabeçalho dos dados:
$ head -n 1 data.in >data.header
$ sed '1d' data.in >data.unsorted
Em seguida, ordene e reúna os dados classificados com o cabeçalho:
$ sort -t ',' -k1,11 -o data.sorted data.unsorted
$ cat data.header data.sorted >data.out
$ rm data.sorted data.header data.unsorted
Ou mais curto
$ sed '1d' data.in | sort -t ',' -k11,11 -o data.sorted
$ head -n 1 data.in | cat - data.sorted >data.out
$ rm data.sorted
Se você está em um sistema Linux usando o GNU coreutils, isso pode ser ainda mais curto,
$ ( head -n 1; sort -t ',' -k11,11 ) <data.in >data.out
Com a implementação GNU coreutils de head
, a entrada padrão para o subprocesso ( (...)
) será consumida primeiro por head
, enquanto os dados restantes serão fornecidos para sort
. A saída do subprocesso será a saída de head
, seguida pela saída de sort
.
Em outros sistemas, head
pode consumir mais do que o esperado do fluxo de entrada padrão, o que dará sort
nothing (ou pelo menos não o restante do arquivo) para trabalhar. Este é o caso em pelo menos o OpenBSD.
O resultado está em data.out
após cada exemplo acima.
Note que todas essas abordagens falharão se os dados em qualquer coluna contiverem uma vírgula ...