Mayor número en una columna usando script de shell


3

Tengo un archivo que contiene algunos datos en formato de columna, por ejemplo:

219m
219m
3.9g
3.9g
4.0g
4.0g
4.1g
4.1g
4.2g
4.2g
4.2g

Quiero comparar los datos y encontrar el mayor valor de estos. Aquí g representa GB ym significa MB. ¿Cómo encontraría el mayor número usando un script de shell de Linux?


puedes echar un vistazo a la unitspágina del manual.
Reuben L.

Respuestas:


6

sort -hpuede hacer esto por usted, pero necesita el sufijo de magnitud (es decir, 'g' y 'm') para estar en mayúsculas. Entonces, para sus datos, podría hacer

tr a-z A-Z < filename | sort -h

En algunos entornos locales, .no se reconoce como separador decimal (consulte Separador decimal: ejemplos de uso [Wikipedia] ). Si ese es el caso, modifique el comando como, por ejemplo:

tr a-z A-Z < filename | LC_NUMERIC=C sort -h

En realidad, esto no funciona en este caso (al menos no mejor que normal sorto sort -n). Supongo que es el separador decimal lo que confunde sort -h.
Daniel Andersson

1
Lo siento, sí, era el separador decimal, pero cambiar el entorno local solucionó eso. Cometí un error cuando probé esto por primera vez, ya que solo cambié LANGen la máquina, donde LC_NUMERICtambién estaba configurada para anular. Puede ser buena información incluir en la respuesta. tr a-z A-Z < filename | LC_NUMERIC=C sort -hcorrige las cosas si el usuario se encuentra en un área donde .no está el separador decimal nativo.
Daniel Andersson

Buen lugar, ¡nunca hubiera pensado en eso!
Flup

Relacionado: Lista de países por separador decimal utilizado . ¡Ser parte de la primera fila de esa tabla hizo que esto fuera un hallazgo fácil (inevitable, incluso) para mí! :-D (rechacé esta respuesta ya que no parecía funcionar antes de encontrar que el problema era local, y SU no me deja cambiar la votación a menos que se edite la publicación, así que lo haré).
Daniel Andersson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.