bash: grep только строки с определенными критериями - PullRequest
4 голосов
/ 22 февраля 2012

Я пытаюсь вычленить строки в файле, где третье поле соответствует определенным критериям. Я попытался использовать grep, но мне не удалось отфильтровать по полю в файле. У меня есть файл, полный записей вроде этого:

12794357382;0;219;215
12795287063;0;220;215
12795432063;0;215;220

Мне нужно выполнить grep только для строк, где третье поле равно 215 (в данном случае только третья строка)

Заранее большое спасибо за помощь!

Ответы [ 7 ]

5 голосов
/ 22 февраля 2012

Опусти молот.

$ awk -F ";" '$3 == 215 { print $0 }' <<< $'12794357382;0;219;215\n12795287063;0;220;215\n12795432063;0;215;220'
12795432063;0;215;220
2 голосов
/ 22 февраля 2012

Решение в чистом виде для предварительной обработки, все еще требующее grep:

while read line; do
  OLF_IFS=$IFS; IFS=";"
  line_array=( $line )
  IFS=$OLD_IFS
  test "${line_array[2]}" = 215 && echo "$line"
done < file | grep _your_pattern_
2 голосов
/ 22 февраля 2012

Grep:

grep -E "[^;]*;[^;]*;215;.*" yourFile

в этом случае awk будет проще:

awk -F';' '$3==215' yourFile
1 голос
/ 22 февраля 2012

Упростите вашу проблему, поместив 3-е поле в начале строки:

cut -d ";" -f 3 file | paste -d ";" - file

затем grep для строк, соответствующих 3-му полю, и удалите 3-е поле в начале:

grep "^215;" | cut -d ";" -f 2-

и тогда вы можете grep для чего угодно.Итак, полное решение:

cut -d ";" -f 3 file | paste -d ";" - file | grep "^215;" | cut -d ";" -f 2- | grep _your_pattern_

Преимущество : Легко понять; недостаток : много процессов.

1 голос
/ 22 февраля 2012

Вот версия sed для grep для строк, где 3-е поле - 215:

sed -n '/^[^;]*;[^;]*;215;/p' file.txt
1 голос
/ 22 февраля 2012

Как насчет этого:

cat your_file | while read line; do
    if [ `echo "$line" | cut -d ";" -f 3` == "215" ]; then
        # This is the line you want
    fi
done
1 голос
/ 22 февраля 2012

Простой egrep (= grep -E)

egrep ';215;[0-d][0-d][0-d]$' /path/to/file

или

egrep ';215;[[:digit:]]{3}$' /path/to/file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...