GNU/Linux >> Linux Esercitazione >  >> Linux

Come eliminare più righe casuali da un file di testo utilizzando Sed?

Voglio eliminare 10 righe casuali da un file di testo che ha 90 righe e quindi inviarlo in un nuovo file. Ho provato a farlo usando sed, ma ho due problemi. Sto usando:

sed -i $((1 + RANDOM & 90))d input.txt > output.txt

e quindi eseguire il comando 10 volte (presumo che ci sia un modo migliore per farlo!)

Il primo problema che ho è che ottengo l'errore:

sed:-e espressione #1, char 2:utilizzo non valido dell'indirizzo di riga 0

Presumo che questo abbia qualcosa a che fare con il fatto che potrebbe aver già cancellato la riga 1 e sta riprovando.

Il secondo problema è che a volte non viene scritto nulla nel file di output, anche se funzionava prima di utilizzare lo stesso comando.

Risposta accettata:

Probabilmente volevi usare RANDOM % 90 invece di & . Ecco da dove vengono gli zeri (cancellare la riga 1 va bene, alla prossima esecuzione le righe saranno numerate 1 .. 89).

C'è un problema, però:la formula potrebbe generare lo stesso numero più volte. Per evitarlo, usa un approccio diverso:mescola i numeri e scegli i primi dieci:

shuf -i1-90 -n10 | sed 's/$/d/' | sed -f- input > output

Se non ti piace sed generando un sed script, puoi usare printf anche :

sed -f <( printf %dd;  $(shuf -i1-90 -n10) ) input > output

Linux
  1. Come eliminare le prime / ultime "n" righe dall'output del comando in Shell?

  2. Elimina le righe vuote usando sed

  3. Rimuovi le righe pari o dispari da un file di testo

  4. Come inserisco il testo nella prima riga di un file usando sed?

  5. Come visualizzare determinate righe da un file di testo in Linux?

Come rimuovere le righe da un file usando il comando Sed

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Come eliminare più righe in Vim

Esercitazione Unix Sed:Elimina le righe di file utilizzando l'indirizzo e i modelli

Tutorial Unix Sed:come scrivere su un file usando Sed

Come eliminare il testo selezionato nell'editor vi