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

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 <(...) <(...)'

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


11
Bem-vindo ao Super Usuário! Você pode elaborar um pouco sobre o -Uargumento? :)
bertieb 16/04
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.