Считая нет. разделителя подряд в файле в Unix - PullRequest
4 голосов
/ 14 января 2009

У меня есть файл records.txt, который содержит более 200 000 записей.

Каждая запись находится на отдельной строке и имеет несколько полей, разделенных разделителем '|'.

В каждой строке должно быть 35 полей, но проблема состоит в том, что в одной из этих строк есть <> 35 полей, т.е. <> 35 '|' символы.

Может кто-нибудь, пожалуйста, предложить способ в Unix, по которому я могу определить строку. (Например, получение количества символов «|» в каждой строке файла)

Ответы [ 3 ]

13 голосов
/ 14 января 2009

Попробуйте это:

awk -F '|'  'NF != 35 {print NR, $0} ' your_filefile
1 голос
/ 14 января 2009

Грег работает с Bash, для друзей Bash там:)

while read n; do [ `echo $n | tr -cd '|' | wc -c` != 35 ] && echo $n; done < records.txt
1 голос
/ 14 января 2009

Этот небольшой скрипт на Perl должен сделать это:

cat records.txt | perl -ne '$t = $_; $t =~ s/[^\|]//g; print unless length($t) == 35;'

Это работает, удаляя все символы кроме |, затем считая оставшиеся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...