Supprimer certaines lignes dans les fichiers texte à l’aide d’UNIX

J’ai un tas de fichiers texte à nettoyer. Im utilisant UNIX bash, donc AWK ou grep est bon.

Les fichiers texte ressemblant à ceci:

1766 1789 1764 1790 1762 1849 0 1357 1817 1366 1857 0 360 42 352 95 0 293 142 302 181 delete-this 0 302 181 0 

Ce que je veux, c’est supprimer toutes les lignes avec “0”, “delete-this”, une seule ligne avec deux colonnes ou trois lignes avec deux colonnes.

Le résultat devrait ressembler à ceci:

 1766 1789 1762 1849 1357 1817 1366 1857 360 42 352 95 293 142 302 181 

Merci beaucoup!

Plus d’infos: La sum des lignes 1, colonne 2 et ligne 2, doit être> 1, sinon, la ligne 2 doit être supprimée.

C’était difficile à comprendre, mais c’est reparti:

 awk '/[0-9]+ [0-9]+/ {a[++t]=$0;b[t]=$2;next} {if (t>=2) for (i=1;i<=t;i++) {if (b[i]-c!=1) print a[i];c=b[i]};t=0}' 1766 1789 1762 1849 1357 1817 1366 1857 360 42 352 95 293 142 302 181 

Comment ça marche:

 awk ' /[0-9]+ [0-9]+/ { # if line does have 2 column of number, then a[++t]=$0 # add line to array "a" and increment variable "t" b[t]=$2 # add column 2 to array "b" next # go to next line } { if (t>=2) # is there more two or more lines with numbers connrected, then for (i=1;i<=t;i++) { # loop trough array "a" with all numbers if (b[i]-c!=1) # test if the difference between this number in column 2 is more than 1 compare to previous line print a[i] # then print array "a" c=b[i] # store array "b" information in variable "b" } ;t=0 # clear counter "t" }' file