разделитель полей awk + count в csv и номер строки печати

У нас есть файл csv с более чем 50000 строк. Это только пример

Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg . . . 

Моя задача: в случае чисел разделителя "," В каждой строке не равно 7, тогда нужно напечатать номер строки

Возможно ли создать одну линию awk или один perl-вкладыш для этой задачи?

Без использования эха или кота, которые проводят время

Это довольно легко с awk. Вы можете установить разделитель, используя -F',' затем подсчитайте столбцы с NF. Для 7 запятых нам понадобится 8 полей и напечатать номер текущей строки с помощью NR.

 awk -F ',' 'NF != 8 {print NR}' test.txt 

Содержание test.txt

 Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg 

Вывод

 2 3 

Оператор Perl s /// (также мог использовать tr /// aka y ///) возвращает количество выполненных подстановок, которое можно использовать для поиска числа «,». Точно так же оператор m // возвращает количество совпадений.

 perl -lne 's/,//g == 7 or print $.' yourfile perl -lne 'print $. if 7 != (() = /,/g)' yourfile sed -ne 's/[^,]//g; /^.\{7\}$/!=' yourfile