2015-11-26 9 views
6

Ho bisogno di cancellare dinamicamente una riga dopo aver contato il numero di colonne al suo interno. Ad esempio, se il numero di colonne nella riga è inferiore a X, eliminare l'intera riga. Ho un file di testo che contiene 100+ linee.Elimina riga dopo il conteggio del numero di colonne nel file di testo

Ecco quello che ho finora, che conta il numero totale di colonne in ogni riga del file di testo ...

Testo di esempio:

KGAI 2 2 40 50 50 98 75 10 35 40 15 25 15 55 
KGED 3 3 15 25 20 60 60 20 50 25 15 25 20 40 
KGFL 1 10 3 4 3 85 25 
KGHG  15 20 40 20 20 20 20 
KGKJ 20 80 25 20 25 97 50 20 60 45 30 30 25 30 
KGNR 2 30 4 5 5 25 90 10 35 15 15 15 10 20 
KGON 1 1 20 10 5 85 65 5 20 30 15 10 15 25 
KGTB 
KHEF 2 2 20 30 50 98 60 10 30 25 10 15 10 45 

Codice:

cat text_data | awk 'BEGIN{FS=" "};{print NF}' 

Uscita:

15 
15 
8 
8 
15 
15 
15 
1 
15 
+0

Cosa uscita cosa si aspetta? – Bernhard

+0

Probabilmente "awk" NF> X'' è sufficiente. – Bernhard

risposta

7

farlo nel contrario: basta stampare coloro che hanno almeno colonne X:

awk -v cols=5 'NF>=cols' file 

Cioè, impostare la variabile cols al valore della quantità minima di colli si desidera che la linea di avere. Ogni volta che è vero, la linea verrà stampata.

In questo caso si ritorna:

KGAI 2 2 40 50 50 98 75 10 35 40 15 25 15 55 
KGED 3 3 15 25 20 60 60 20 50 25 15 25 20 40 
KGFL 1 10 3 4 3 85 25 
KGHG  15 20 40 20 20 20 20 
KGKJ 20 80 25 20 25 97 50 20 60 45 30 30 25 30 
KGNR 2 30 4 5 5 25 90 10 35 15 15 15 10 20 
KGON 1 1 20 10 5 85 65 5 20 30 15 10 15 25 
KHEF 2 2 20 30 50 98 60 10 30 25 10 15 10 45 
+1

Grazie! Questo ha funzionato perfettamente! –

Problemi correlati