Come rimuovere duplicati Lines in VI

March 15

Vi è un potente editor di testo riga di comando nativo per Unix. Anche se non è possibile rimuovere le linee duplicate di testo con comandi nativi VI, è possibile farlo utilizzando i comandi nativi Unix e script di shell all'interno dell'editor.

istruzione

istruzione

1 Eseguire un backup del file.

:w doc.bkup

2 Se è accettabile per ordinare le voci nel file di testo, utilizzare prima il comando sort:

:1,$!sort

Questo comando dice "utilizzare il comando tipo Unix su linee 1 alla fine del file."

3 Utilizzare il comando uniq Unix per rimuovere le righe duplicate.

:1,$!uniq

Questo comando dice "utilizzare il comando Unix uniq per rimuovere le righe duplicate dalla linea 1 alla fine del file."
Il comando uniq funziona solo su linee duplicate che sono adiacenti gli uni agli altri e non hanno alcun righe vuote tra di loro.

4 Sappiate che, se non è possibile ordinare il file, si dovrà utilizzare uno script awk. Awk è un programma di utilità di testo manipolazione Unix. Quando viene utilizzato con VI, esso deve svolgere faccende avanzate che vi da sola non può fare.

Copiare il seguente script in un documento di testo e salvarlo con il nome dup.sh nella stessa directory del documento di testo.

#!/bin/bash
awk '!($0 in a) {a[$0];print}'

Questo script dice "trovare ogni linea unica e stamparlo."

5 Dalla riga di comando di Unix, rendere lo script eseguibile dup.sh con il comando:

chmod +x dup.sh

6 Rimuovere le righe duplicate non consecutivi dall'interno VI con il seguente comando:

:1,$!./dup.sh

Questo comando dice "eseguire lo script dup.sh dalla linea 1 alla fine del file."

7 Salvare il file con il comando

: W.

Consigli e avvertenze

  • È possibile combinare il tipo ei comandi uniq utilizzando sorta -u.You possibile eliminare le righe non consecutivi dalla linea di comando con il comando "awk '($ 0 a) {a [$ 0];} stampa!' Sort.txt> sort2.txt ". Il file sort2.txt conterrà le voci univoche.