Как найти 5 последовательных «0» в файле?

Как найти 5 последовательных «0» в файле?

У меня есть следующие данные в текстовом файле:

Name,7/27,7/28,7/29,7/30,7/31,8/1,8/2,8/3,8/4
abc,5,3,8,8,0,0,2,0,11
def,6,7,0,0,0,0,0,2,5
ghi,1,3,5,2,0,0,5,3,6

Мне нужно узнать, какой файл (столбец "Имя" - имя файла) выдает 5 последовательных 0в качестве вывода. В этом примере это будет def.

решение1

Я бы, наверное, сделал это в awk, используя ,в качестве разделителя:

$ awk -F, '/,0,0,0,0,0/{print $1}' file 
def

Однако это также поймает такую ​​строку:

mno,6,7,0,0,0,0,0.5

Чтобы избежать этого, выполняйте сопоставление только в том случае, если за последним 0следует a ,или конец строки:

awk -F, '/,0,0,0,0,0(,|$)/{print $1}' file 

решение2

grep '0,0,0,0,0' file.txt

выводит соответствующую строку:def,6,7,0,0,0,0,0,2,5

grep '0,0,0,0,0' file.txt | cut -d, -f1

печатает первое поле, используя ,в качестве разделителя:def

решение3

Чтобы получить желаемый результат, мы можем попробовать выполнить следующие команды.

Gnu sed

$ sed -nE 'G;y/,/\n/;/(\n0){5}\n/P' file

$ awk -F, '/(,0){5}(,|$)/ && $0 =$1""' file

$ grep -oP '^[^,]+(?=.*?(,0){5}(,|$))' file 

Grep с включенным режимом PC Re ищет пять последовательных символов ,0внутри просмотра вперед, чтобы они не попали в выходной пакет grep.

решение4

Сед может сделать это:

sed -n '/,0,0,0,0,0[,$]/p' file.txt | sed 's/,.*//'

Связанный контент