Utilizzando AWK o sed come posso rimuovere qualsiasi riga in cui il timestamp (prima colonna) non è uguale a 13 caratteri numerici ignorando la prima riga.
Prima:
timestamp,pageNo,description
1451317591621,01,Home Page Request
14513,Home Page Request
1451317591623,03,Home Page Request
1451317,04,Home Page Request
1451317591625,05,Home Page Request
Dopo:
timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request
risposte:
1 per risposta № 1utilizzando awk
(richiede gawk 4+ o 3+ con l'opzione --re-interval)
awk -F, "$1~/^[0-9]{13}$/||NR==1" file
utilizzando sed
sed "/^[0-9]{13},/p;1p;d" file
2 per risposta № 2
utilizzando sed
, passa se il numero di riga è uno o il primo campo è composto esattamente da tredici cifre; altrimenti, elimina.
sed -r -e "1b" -e "/^[0-9]{13},/b" -e d file
Utilizzando Awk, allo stesso modo, stampa se il numero di riga è uno o il primo campo è composto da tredici caratteri e tutti i numeri.
awk -F , "NR == 1 || (len($1) == 13 && $1 ~ /^[0-9]*$/)" file
0 per risposta № 3
awk -F, "NR==1 || (length($1) == 13 && $1+0 == $1)" file
0 per risposta № 4
Se Perl è un'opzione:
perl -F, -ane "print if $F[0] =~ /^[0-9]{13}$/ or $. == 1" file
Vengono utilizzate queste opzioni della riga di comando:
-n
eseguire il ciclo attorno a ciascuna riga del file di input-a
modalità autosplit - divide le linee di input in@F
Vettore. Il valore predefinito è la divisione su spazi bianchi.-e
eseguire il codice perl-F
modificatore autosplit, in questo caso si attiva,
$.
è il numero di riga
@F
è la matrice di parole in ogni riga, indicizzata a partire da $F[0]
produzione:
timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request