Что-то вроде этого в awk?
$ awk 'NR==FNR{Arr[NR]=$0;next}{if($0==4){i++;print Arr[i]}else{print}}' after.txt before.txt
1
2
3
2743
1
1
2
3
3028
2
3
2850
С 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
Оператор s/// в Perl (можно было бы также использовать оператор 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