$ sed -E 's/ {3,}/@/g' file | sort -t @ -k3,3 -k5,5 | sed 's/@/ /g'
ec:8e:b5:f8:a2:12 "Dipin Gyawali" 2015 me Lan
f0:de:f1:33:33:32 "Dipendra Karki" 2015 me Lan
e8:b4:c8:b2:d8:b9 "Biswas Gautam" 2016 me Mob
f0:27:65:70:91:62 "Karan Rai" 2016 cs Mob
Isso substitui qualquer execução de três ou mais espaços com o caractere @
(qualquer caractere que não esteja presente nos dados funcionará).
Em seguida, sort
é instruído a interpretar sua entrada como campos @
-delimited e classifica no terceiro campo (ano) e no quinto campo (dispositivo). O% final sed
substitui cada @
nos dados classificados por quatro espaços (você pode optar por inserir uma guia literal aqui ou \t
com o GNU sed
).
Mais bonito:
$ sed -E 's/ {3,}/@/g' file | sort -t @ -k3,3 -k5,5 | column -s @ -t
ec:8e:b5:f8:a2:12 "Dipin Gyawali" 2015 me Lan
f0:de:f1:33:33:32 "Dipendra Karki" 2015 me Lan
e8:b4:c8:b2:d8:b9 "Biswas Gautam" 2016 me Mob
f0:27:65:70:91:62 "Karan Rai" 2016 cs Mob
Os seguintes usos usam awk
para formatar cada coluna como uma cadeia de 20 caracteres justificada à esquerda:
$ sed -E 's/ {3,}/@/g' file | sort -t @ -k3,3 -k5,5 | awk -F@ '{ for (i=1;i<=NF;++i) printf("%-20s",$i); print "" }'
ec:8e:b5:f8:a2:12 "Dipin Gyawali" 2015 me Lan
f0:de:f1:33:33:32 "Dipendra Karki" 2015 me Lan
e8:b4:c8:b2:d8:b9 "Biswas a Gautam" 2016 me Mob
f0:27:65:70:91:62 "Karan Rai" 2016 cs Mob
Ou você pode formatá-los individualmente:
$ sed -E 's/ {3,}/@/g' file | sort -t @ -k3,3 -k5,5 | awk -F@ '{ printf("%s %-30s %-30s %-30s %s\n", $1,$2,$3,$4,$5) }'
ec:8e:b5:f8:a2:12 "Dipin Gyawali" 2015 me Lan
f0:de:f1:33:33:32 "Dipendra Karki" 2015 me Lan
e8:b4:c8:b2:d8:b9 "Biswas a Gautam" 2016 me Mob
f0:27:65:70:91:62 "Karan Rai" 2016 cs Mob