Как искать 26 вкладок в поле - PullRequest
1 голос
/ 16 сентября 2011

может кто-нибудь помочь

у меня есть файл, содержащий значения, разделенные табуляцией, должно быть 26 вкладок на запись, но у некоторых есть еще, я хочу скопировать из файла те записи, которые имеют 26 на строку, чтобы я мог принять файл

что-то вроде cat infile |grep "/t"*<26 times> >outfile

спасибо

Мэтт

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

это возможно с помощью grep, но awk предназначен для таких задач.

awk 'BEGIN{FS="\t"}; {if ( NF == 26 ) print $0}' infile > outfile

У awk есть множество встроенных переменных, FS = FieldSeperator, вы можете установить это значение на любое значение, но здесь '\t '- это константа на языке C, представляющая символ табуляции.'|'(труба) символ также популярен.

BEGIN { ... code ... } - это блок кода, который выполняется перед обработкой.Последний бит - это код внутри не-BEGIN-блока, то есть { if ( NF ... } - это действие, которое выполняется для каждой читаемой строки.

NF = Number (of) Fields.Таким образом, вы можете легко фильтровать по количеству полей в файле.

NR = Количество (из) записей.

Также обратите внимание, что для grep или awk нет необходимостииспользуйте cat file | ..., обе утилиты читают любые файлы, переданные в командной строке, т.е. grep .... file1 file2 ... filen

Надеюсь, это поможет.

PS какВы, кажется, являетесь новым пользователем, если вы получаете ответ, который помогает вам, пожалуйста, помните, чтобы пометить его как принятый и / или дать ему + (или -) как полезный ответ.

2 голосов
/ 16 сентября 2011

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

grep '^\([^\t]*\t\){26}[^\t]*$'

Что он делает, так это находит строки, которые имеют 26 вкладок, возможно, разделенных не вкладками. В зависимости от вашей версии grep, вам может понадобиться:

grep -P '^ ([^ \ t] \ t) {26} [^ \ t] $'

для получения полной поддержки регулярных выражений Perl

1 голос
/ 16 сентября 2011

Просто:

awk 'NF==26' infile > outfile

Нет необходимости указывать FS, так как вкладка является вкладкой по умолчанию, нет необходимости указывать действие, так как действие по умолчанию в awk - печать соответствующей записи.

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