También puede resolver su problema usando expresiones regulares y grep
.
grep -Ev '(,0(,[^0,]+)*){4,}' file.csv
Lo probé en este archivo:
gene,v1,v2,v3,v4,v5,v6,v7
gene1,0,1,5,0,0,4,100
gene2,1,0,0,0,5,210,2
gene3,0,0,0,0,6,0,0
gene4,0,0,0,4,6,0,0
gene5,0,1,0,4,6,0,0
Hay algunas suposiciones:
La expresión regular podría extenderse para abordar tales casos si lo necesita.
Да, поддержка записей с разделителями NUL -постепенно добавлялась в утилиты GNU за последние несколько десятилетий. GNU head -z
относительно недавний (2015 ), в то время как GNU sort
имел -z
несколько десятилетий (1996 )иxargs
-0
даже более длительный (1990 ).
Здесь вы также можете:
find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
sort -rz | sed -z 1,6d | xargs -r0 echo rm -rf
Дополнение -z
к GNU sed
недавнее (2012 ), не такое недавнее, как дополнение head
.
Текстовые утилиты GNU десятилетиями справлялись с байтами NUL во входных данных, так что вы всегда можете это сделать:
find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
tr '\0\n' '\n\0' |
sort -r | tail -n +7 |
tr '\0\n' '\n\0' |
xargs -r0 echo rm -rf
Или всегда можно установить zsh
и сделать
echo rm -rf /BACKUPDIR/*(D/[1,-7])
(см. также квалификатор n
glob для численной сортировки, поэтому 10 сортируются после 9, а не между 1 и 2 ).
(даты выше взяты из журналов изменений, официальные релизы, в которые были включены эти изменения, могли появиться немного позже ).