Come posso rimuovere ogni linea dispari, usando sed?Come rimuovere ogni altra linea con sed?
remove
keep
remove
keep
remove
...
Come posso rimuovere ogni linea dispari, usando sed?Come rimuovere ogni altra linea con sed?
remove
keep
remove
keep
remove
...
GNU sed ha una modalità di indirizzamento adatto:
sed -n '1~2!p' file
che significa, partendo dalla linea 1, e con il passaggio 2, stampa tutte le altre linee.
equivalente, è possibile eliminare il -n
, ed eliminare le linee corrispondenti:
sed '1~2d'
Può anche essere fatto utilizzando awk:
awk 'NR%2==0' file
(Ogni volta che il numero di riga è un multiplo di 2, stampa la linea)
Grazie per questo! molto utile. –
Ricevo l'errore "codice comando non valido ~" quando provo con sed su macos. –
Ecco il più breve che posso pensare:
sed -n 'g;n;p' file
Dovrebbe funzionare con versioni non GNU di sed
(così come GNU sed
). più
+1 per la portabilità –
Anche su OS X! (A differenza di 'sed -n '1 ~ 2! P''.) Ci vogliono le linee 2,4,6, ... Non riuscivo a capire dalla pagina man come prendere le linee 1,3,5, .. Aggiungere una prima linea è un semplice trucco, però. – Nagel
@Nagel: prova: 'sed -n 'p; n' file' o' sed 'n; d' file' per l'output delle linee dispari. A proposito, non penso che 'g' sia necessario per l'output delle linee pari:' sed -n 'n; p' file' sembra funzionare. –
Uno awk:
awk getline file
soluzione Perl:
perl -ne 'print if $. % 2 == 0' file
$.
è il numero di riga
Il tizio ha chiesto 'sed', che mostra una scarsa capacità di lettura da parte tua, ma qualcuno potrebbe trovare utile questo, quindi +1. –
Ho risposto poiché sed, awk e perl possono essere spesso usati in modo intercambiabile. Mentre ci sono differenze di velocità e semplicità, sono tutti usati sulla riga di comando o all'interno degli script di shell. –
La metà delle domande di questa mattina sembra essere april fools scherzi pure ... – Will
Se è un pesce d'aprile, la risposta deve essere: grep Non input.txt – paxdiablo
@paxdiablo: Ma per quanto riguarda 'grep -v Remove'? – Cascabel