Estes são os dados que eu quero classificar. Mas sort
trata o numérico para string, os dados não classificados como eu esperava.
/ home / arquivos / profile1
/ home / arquivos / profile10
/ home / arquivos / profile11
/ home / arquivos / profile12
/ home / arquivos / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Eu quero classificar isso para,
/ home / arquivos / profile1
/ home / arquivos / profile2
/ home / arquivos / profile3
/ home / arquivos / profile4
/ home / arquivos / profile5
/ home / arquivos / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
Existe uma boa maneira de bash script? Não posso usar scripts ruby ou python aqui.
fonte
sort -V
faria.Respostas:
Você pode usar um caractere sentinela temporário para delimitar o número:
Aqui, o caractere sentinela é ';' - ele não deve fazer parte de nenhum nome de arquivo que você deseja classificar - mas você pode trocar o ';' com qualquer personagem que você gosta. Você tem que mudar a
sed
,sort
etr
parte em seguida em conformidade.O canal funciona da seguinte maneira: O
sed
comando insere o sentinela antes de qualquer número, osort
comando interpreta o sentinela como delimitador de campo, classifica com o segundo campo como chave de classificação numérica e otr
comando remove o sentinela novamente.E
log
denota o arquivo de entrada - você também pode canalizar sua entradased
.fonte
Isso é muito semelhante a esta pergunta . O problema é que você tem um campo alfanumérico no qual está classificando e
-n
não o trata de maneira sensata, da mesma forma que a versão sort (-V
). Assim use:Note que este recurso é atualmente suportado pelas implementações de classificação GNU, FreeBSD e OpenBSD.
fonte
sort -V
Não usesort -v
. É difícil dizer à primeira vista.Se todos os nomes de arquivos tiverem o mesmo prefixo antes da parte numérica final, ignore-o ao classificar:
(20 é a posição do primeiro dígito. É um mais o comprimento de
/home/files/profile
.)Se você tiver várias partes não numéricas diferentes, insira uma sentinela .
fonte