J’ai un fichier avec des données comme ceci:
1, 3, 0, 0, 0 0, 4, 5, 0, 5 2, 6, 0, 1, 0
Je voudrais écrire un script shell pour supprimer toutes les lignes où le 3ème argument est 0 (ici les lignes 1 et 2)
Je sais déjà que
sed -i '/0/d' file.txt
mais je ne sais pas comment je peux sélectionner les 3èmes arguments, quels que soient les autres.
Avez-vous une idée?
Awk peut être un meilleur outil que sed pour cette tâche:
awk -F' *, *' '$3 != 0 {print}' FILE
Mais sed peut le faire:
sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 0,/d' FILE
sed -iE '/^([^,]+,){2} 0,/d' file
expliqué avec explain.py :
sed -iE '/^([^,]+,){2} 0,/d' file \_/ ||
|| || \_/ | | | ||
|| || | | \- delete command | ||
|| || | | | ||
|| || | \- followed by blank zero komma | ||
|| || | | ||
|| || \- two times this inner pattern | ||
|| || | ||
|| |\- followed by a comma | ||
|| | | ||
|| \- at least one of them | ||
|| | ||
|\- komma | ||
| | ||
\- not | ||
| || ||\- start of pattern, group of characters, which are | || || | || |\- at begin of line | || | | || \- start of pattern for delete command | || | |\- Extended regexp (parenthesis and braces without masking) | | | \- inplace changes | \- run sed
awk avec l’édition en place (similaire à sed -i)
awk '$3!="0,"{print $0>FILENAME}' file
Rubis (1.9+)
ruby -ane 'print unless $F[2]=="0," ' file