Come diff solo la prima riga di due file?


17

Voglio diff solo la prima riga di due file, al contrario dell'intero file. Come potrei farlo? Ho solo bisogno di una soluzione per la prima riga, ma se si potesse specificare il numero di righe sarebbe una risposta molto migliore.

Quindi diff non restituirebbe alcuna differenza tra i seguenti due file:

a
1
2

e:

a
3
4

ha funzionato per te ...?
nerdwaller,

@nerdwaller Yup, accettato.
gsingh2011,

fagioli freschi. Stavo cercando di pensare ad altre opzioni, per fortuna non è necessario.
nerdwaller,

Risposte:


26

Ecco qui:

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

(questo non restituirebbe nulla del genere).

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

Returns:
2c2
< 1
---
> 3

Potresti incorporarlo in una sceneggiatura per fare le cose che dici.

#!/bin/bash

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

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

Per usarlo, basta rendere lo script eseguibile con chmod +x nameofscript.sh e quindi eseguire, ./nameofscript.sh ~/file1 ~/Docs/file2che lascia il numero predefinito di righe su 1, se si desidera aggiungere di più un numero alla fine di quel comando.

(Oppure potresti fare degli switch nel tuo script con -f1 file1 -f2 file2 -n 1, ma non ricordo in cima alla mia testa l'istruzione case per quello).

headritorna dall'inizio il numero di righe come suggerito da -n. Se tu volessi fare il contrario, lo sarebbetail -n ${numLines} (la coda fa il numero di righe dalla fine).

Modifica il 5/10/16:

Questo è specifico per Bash (e shell compatibili). Se hai bisogno di usarlo da qualcos'altro:

bash -c 'diff <(...) <(...)'

Come funzionerebbe per il diff ricorsivo quando ho bisogno di diff due directory?
lanoxx,

@lanoxx diff -r dir1 dir2per le directory, per limitarlo probabilmente vorrai dirottarlo su qualcos'altro. Se hai specifiche apri una nuova domanda e dai un link qui.
nerdwaller,

In sostanza, la stessa domanda è semplicemente ricorsiva: solo Diff (le prime n righe | tutto tranne le prime n righe) per tutti i file in due directory.
lanoxx,

@lanoxx come ho detto, fai una nuova domanda e collegala. È la migliore pratica per la comunità di super utenti invece di espandere la portata di alcune domande di altri utenti.
nerdwaller,

1
@Veridian Che shell stai usando? Questo è specifico per Bash, quindi potrebbe essere necessario chiamarebash -c "diff <(...) <(...)"
nerdwaller

-1

diff -U (n di linee) file1 file2


1
Benvenuto in Super User! Puoi approfondire un po 'l' -Uargomento? :)
bertieb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.