¿Cómo diferenciar solo la primera línea de dos archivos?

17

Quiero diferenciar solo la primera línea de dos archivos, a diferencia del archivo completo. ¿Como podría hacerlo? Solo necesito una solución para la primera línea, pero si pudiera especificar el número de líneas, esa sería una respuesta mucho mejor.

Así que diff no devolvería diferencias entre los siguientes dos archivos:

a
1
2

y:

a
3
4
gsingh2011
fuente
¿Eso funcionó para ti ...?
nerdwaller
@nerdwaller Sí, aceptado.
gsingh2011
frijoles fríos Estaba tratando de pensar en otras opciones, afortunadamente eso no es necesario.
nerdwaller

Respuestas:

26

Aqui tienes:

diff <(head -n 1 file1) <(head -n 1 file2)

(Esto no devolvería nada).

diff <(head -n 2 file1) <(head -n 2 file2)

Returns:
2c2
< 1
---
> 3

Puede incorporar eso en un guión para hacer las cosas que menciona.

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

Para usar eso, solo haga que el script sea ejecutable chmod +x nameofscript.shy luego ejecutarlo. ./nameofscript.sh ~/file1 ~/Docs/file2Eso deja el número predeterminado de líneas en 1, si desea agregar más un número al final de ese comando.

(O puede hacer cambios en su secuencia de comandos con -f1 archivo1 -f2 archivo2 -n 1, pero no recuerdo la parte superior de mi cabeza la declaración del caso para eso).

headdevuelve desde el principio el número de líneas como lo sugiere -n. Si quisieras hacer reversa, sería tail -n ${numLines}(la cola desde el final vuelve el número de líneas).

Editar 5/10/16:

Esto es específico de Bash (y shells compatibles). Si necesita usar esto de otra cosa:

bash -c 'diff <(...) <(...)'
nerdwaller
fuente
¿Cómo funcionaría eso para diff recursivo cuando necesito diff dos directorios?
lanoxx
@lanoxx diff -r dir1 dir2para los directorios, para limitarlo es probable que desee a la tubería que a otra cosa. Si tiene detalles, abra una nueva pregunta y dé un enlace aquí.
nerdwaller
Básicamente, la misma pregunta es recursiva: solo diferencie (las primeras n líneas | todo excepto las primeras n líneas) para todos los archivos en dos directorios.
lanoxx
@lanoxx como dije, haga una nueva pregunta y vincúlela. Es la mejor práctica para la comunidad de superusuarios en lugar de ampliar el alcance de la pregunta de algún otro usuario.
nerdwaller
1
@Veridian ¿Qué shell estás usando? Esto es específico bash, por lo que puede que tenga que llamarbash -c "diff <(...) <(...)"
nerdwaller
-1

diff -U (n de líneas) archivo1 archivo2

Andress
fuente
1
¡Bienvenido a Super User! ¿Puedes elaborar un poco sobre el -Uargumento? :)
bertieb