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