Como diferenciar apenas a primeira linha de dois arquivos?

17

Eu quero diferenciar apenas a primeira linha de dois arquivos, em oposição ao 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, seria uma resposta muito melhor.

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

a
1
2

e:

a
3
4
gsingh2011
fonte
isso funcionou para você ...?
Nerdwaller 28/11/2012
@nerdwaller Sim, aceito.
gsingh2011
feijão fresco. Estava tentando pensar em outras opções, felizmente isso não é necessário.
Nerdwaller

Respostas:

26

Aqui está:

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 mencionadas.

#!/bin/bash

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

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

Para usar isso, apenas torne o script executável com chmod +x nameofscript.she, em seguida, execute ./nameofscript.sh ~/file1 ~/Docs/file2Isso deixa o número de linhas padrão em 1, se você desejar acrescentar um número ao final desse comando.

(Ou você pode alternar no 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).

headretorna desde o início o número de linhas, conforme sugerido por -n. Se você quiser fazer a reversão, seria tail -n ${numLines}(a cauda faz, no final, o número de linhas).

Editar 10/10/16:

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

bash -c 'diff <(...) <(...)'
nerdwaller
fonte
Como isso funcionaria para diferenças recursivas quando eu preciso diferenciar dois diretórios?
lanoxx
@lanoxx diff -r dir1 dir2para diretórios, para limitá-lo, você provavelmente desejará canalizar isso para outra coisa. Se você tiver detalhes, abra uma nova pergunta e forneça um link aqui.
Nerdwaller 2/10
Bem, basicamente, a mesma pergunta apenas recursivamente: Difere apenas (as primeiras n linhas | tudo, exceto as primeiras n linhas) para todos os arquivos em dois diretórios.
lanoxx
@lanoxx como eu disse, faça uma nova pergunta e vincule-a. É uma prática recomendada para a comunidade de superusuários em vez de expandir o escopo da pergunta de outros usuários.
Nerdwaller 4/10
11
@Veridian Qual shell você está usando? Este é o bash específico, assim você pode precisar chamarbash -c "diff <(...) <(...)"
nerdwaller
-1

diff -U (n de linhas) arquivo1 arquivo2

endereço
fonte
11
Bem-vindo ao Super Usuário! Você pode elaborar um pouco sobre o -Uargumento? :)
bertieb 16/04