sort -dk2,2 phpbook |
sed "s/\t/\n/3;s//\n/2;s// /g"
Pelo que entendi, você tem um arquivo chamado phpbook
que consiste em linhas de entradas de catálogo telefônico que se parecem com isso:
{first}\t{last}\t{address}\t{city}\t{state}\t{zip}
Você deseja classificá-las em {last}
, adicionar novas linhas seguindo {last}
e {address}
para cada entrada, traduzir \t
abs para <spaces>
e depois imprimir os resultados em stdout
. Se não for esse o caso, não sei o que mais o seu comando faria - mas às vezes posso ser bastante denso.
Você deve observar que sort
delimita por <TAB>
caracteres por padrão, portanto:
sed 's/\t/,/g' | sort ... -t ,
... provavelmente não vale a pena fazer.
Pensar é um pouco mais e suponho que seja muito provável que os seus delimitadores sejam mistos e que o sed
inicial pretenda normalizá-los. Isso faz sentido. Talvez como:
1,2\t3\t4,5,6
... ou algo assim. Nesse caso, uma tradução inicial de algum tipo é necessária. Então talvez ...
tr , \t <phbook | sort ... | sed ...
trabalharia um pequeno bettet. Também ...
sort ... -k 2
... pode ser problemático em casos de borda porque quando você o usa, você não sort
em somente o segundo campo, mas sim do segundo campo para o fim da linha. Em geral, quando as pessoas fazem isso, elas realmente querem -k2,2
, que confina os dados sort
considera somente o segundo campo.
Também pode valer a pena adicionar uma chave secundária como:
...sort -dk2,2 -k1,1
... qual seria sort
principalmente em sobrenomes e secundariamente em nomes próprios. Dessa forma, Zed Smith seguiria Alpha Smith todas as vezes.
De qualquer forma, se eu estiver certo, o sort | sed
pipeline acima deve fazer a coisa toda. Estou assumindo que seu sed
entende os \e
scapes que usei, mas se isso não acontecer, você pode tentar substituir o script sed
entre aspas por:
s/<literal TAB>/\
/3;s//\
/2;s// /g