¿Cómo recupero solo la línea necesaria de la salida del terminal?

16

Quiero obtener solo digamos tercera línea de df -hsalida.

¿Qué tipo de comando debo usar?

emrecnl
fuente
16
Nota para el futuro: esta pregunta es muy muy básica. Por lo general, se recomienda mostrar cierto esfuerzo y lo que has intentado antes de preguntar.
Sergiy Kolodyazhnyy
Si bien puede ser legítimo obtener la tercera línea de un archivo con un formato estático supuesto, eso es diferente de la tercera línea de un programa de diagnóstico con una salida que varía según el estado del sistema. Por ejemplo, montar una nueva unidad / partición alfabéticamente antes de que su 3ra línea actual la sople Por lo tanto, la respuesta de @ Random832 a continuación es la mejor.
MarkHu

Respuestas:

31

Esto generará la tercera línea, independientemente del contenido.

df -h | sed -n 3p
muru
fuente
1 para la respuesta más pequeño: df -h|sed -n 3p.
EKons
16

El dfcomando en realidad acepta un argumento que identifica el sistema de archivos que desea. Entonces podría usar, por ejemplo, df /homeo df /dev/sda3.

Si tiene la intención de analizar la salida de un script, querrá usarlo df -Ppara garantizar que nunca se ajuste a varias líneas. Entonces, por ejemplo, podría usar df -Ph /home | tail -n +2(pero si está analizando la salida de un script, tenga en cuenta la posibilidad de nombres de archivo con espacios en ellos)

Aleatorio832
fuente
2
¡Eso es! En lugar de analizar el resultado, use el comando para proporcionar exactamente lo que desea.
fedorqui
1
Pero el OP dijo que quería que la línea 3. df /homeproporciona un encabezado. Estás interpretando el propósito del usuario. Puede que tengas razón. Puede estar equivocado, ¿quién sabe?
Mike S
@MikeS Una docena de otras respuestas ya cubrieron la obtención de la línea 3 sin contexto. Proporcioné información adicional para que el OP la tenga si es útil para él. Y tail -n +2elimina el encabezado.
Random832
14

Puede usar una combinación de heady tail:

df -h | head -3 | tail -1

O

df -h | tail -n +3 | head -1

Pero tenga en cuenta que, dfpermite filtrar la salida de las opciones de dfsí mismo, debe verlas primero antes de usar cualquier comando externo.

Compruebe man df.

heemayl
fuente
44
+1 por mencionar que df puede filtrar entradas específicas
Sergiy Kolodyazhnyy
2
De hecho, casi siempre es mejor filtrar los datos antes de canalizarlos a programas externos.
Zach Mertes
10

Awk es una herramienta de procesamiento de texto, por lo que es apropiada para esta tarea

df -h | awk 'NR == 3'
Sergiy Kolodyazhnyy
fuente
6

Supongo que no necesariamente está buscando la tercera línea, sino la línea que menciona un disco específico (por ejemplo /dev/sda3) o un punto de montaje específico (por ejemplo /home).

Entonces, en lugar de solo mostrar la tercera línea, que es insegura porque el orden de salida puede cambiar y puede obtener un resultado diferente, puede filtrar la salida por contenido y mostrar solo las líneas que coinciden con un patrón específico o contienen una palabra clave.

Tu herramienta para esto es grep.

Por ejemplo, si desea la línea sobre el dispositivo /dev/sda3, escriba:

df -h | grep '/dev/sda3'

Si desea que la línea mencione su directorio de inicio como punto de montaje, use:

df -h | grep '/home'
Byte Commander
fuente
3
O df -h /dev/sda3o df -h /home(este último funciona incluso si no es un punto de montaje).
Random832
6

También puedes usar perl:

df -h | perl -ne 'print if $.==3' 

El $.es el número de línea actual, por lo que puede imprimir la enésima línea con perl -ne 'print if $.==N'.

terdon
fuente
1
Es por eso que Perl sigue siendo relevante en mi opinión. Combina sed y awk con un lenguaje de programación estructurado que (aunque muchos dirán que es realmente muy feo [y podría estar de acuerdo]) es al menos consistente y muy útil para estas frases cortas. Gracias terdon. Esto es casi tan sucinto como el ejemplo sed, aunque un poco más detallado.
Mike S
@MikeS encantado de ayudar. Sin embargo, como pirata informático de Perl, debo señalar que el código de Perl es tan feo como tú. Los buenos programadores pueden escribir código hermoso en Perl, es solo que el idioma no te obliga a hacerlo y es fácil no hacerlo.
terdon
2

Mi primera idea sería una construcción cabeza-cola.

Ejemplo:

df -h | head -3 | tail -1

head -3hace que la salida se detenga después de tres líneas y tail -1solo mostrará la última línea.

Alternativamente, si sabe cómo se verá la salida, también podría usarla greppara buscar líneas que contengan una cadena determinada.

Wayne_Yux
fuente