Como diferenciar apenas a primeira linha de dois arquivos?

15

Eu quero diferenciar apenas a primeira linha de dois arquivos, ao contrário do arquivo inteiro. Como eu faria isso? Eu só preciso de uma solução para a primeira linha, mas se você pudesse especificar o número de linhas que seria uma resposta muito melhor.

Assim, o diff não retornará diferenças entre os dois arquivos a seguir:

a
1
2

e:

a
3
4
    
por gsingh2011 27.11.2012 / 17:14

2 respostas

23

Aqui você vai:

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

(isso não retornaria nada do que nunca).

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

Returns:
2c2
< 1
---
> 3

Você pode incorporar isso em um script para fazer as coisas que menciona.

#!/bin/bash

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

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

Para usar isso, basta tornar o script executável com chmod +x nameofscript.sh e, em seguida, executar ./nameofscript.sh ~/file1 ~/Docs/file2 . Isso deixa o número padrão de linhas em 1, se você quiser acrescentar mais um número ao final desse comando.

(Ou você poderia fazer opções em seu script com -f1 arquivo1 -f2 arquivo2 -n 1, mas não me lembro do topo da minha cabeça a declaração de caso para isso).

head retorna do início o número de linhas, conforme sugerido por -n . Se você quisesse fazer o reverso, seria tail -n ${numLines} (a cauda faz no final o número de linhas).

Editar 5/10/16:

Isso é específico para Bash (e shells compatíveis). Se você precisar usar isso de outra coisa:

bash -c 'diff <(...) <(...)'
    
por 27.11.2012 / 17:32
-1

diff -U (n de linhas) arquivo1 arquivo2

    
por 16.04.2018 / 16:51