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

Что-то вроде этого в 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
2
28.02.2017, 16:37
2 ответа

С 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
5
27.01.2020, 21:52

Оператор 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
2
27.01.2020, 21:52

Теги

Похожие вопросы