comparando uma linha com suas seguintes linhas dentro de um arquivo

0

Supondo que eu tenha um arquivo chamado exemplo.txt que contém dados no seguinte formato:

1 John
2 Crema
3 Abraham
1 John

Eu posso ler o arquivo linha por linha da seguinte maneira:

while read p
do
echo $p
done <sample.txt

Existe alguma maneira de comparar uma determinada linha com suas linhas a seguir para que eu possa executar várias tarefas, como eliminação de duplicatas ou correspondência de padrões, etc? Que coisas adicionais terei que adicionar para realizar a tarefa de comparação?

    
por Black 14.09.2015 / 22:18

2 respostas

1

prev=""
while read p; do
    # compare p with prev somehow
    prev="$p"
done <sample.txt

Isso permite que você compare duas linhas diretamente adjacentes. Se você quiser comparar linhas mais distantes no arquivo, ele se torna mais complicado e pode não ser melhor escrito em shell (embora os detalhes específicos variem com base na tarefa).

    
por 14.09.2015 / 22:21
0
awk '{if (NR==1) STR=$0; if ($0==STR) print NR}' file

Nesse caso, uso a linha número 1 como base para comparação. Modifique NR == 1 para o número de linha que você deseja comparar.

Ele imprimirá todos os números de linha que correspondem à linha selecionada, incluindo a linha selecionada. Aplicado ao seu exemplo, imprimirá:

1
4

Depois de ter números de linha, você pode eliminá-los por meio de, por exemplo, sed:

sed -i '4d' file

Ou realize outras tarefas nessas linhas (por exemplo, mais awk com NR = número da linha)

    
por 15.10.2015 / 10:49