2013-08-16 2 views
2

У меня есть файл с большим количеством разделенных пробелами текстовых столбцов. Один столбец выглядит так: , где число равно 3 или более цифрам. например < 234>, < 9473> и т.д.Найти шаблон в большом текстовом файле быстро?

например.

text.... text... <2329> text... 
text.... text... <735> text... 
text.... text... <23229> text... 
text.... text... <2444> text... 

Я только хочу найти эти цифры и распечатать или сохранить результаты поиска с помощью bash. Как мне это сделать ?

Благодаря

Я делаю это с помощью Linux [L] убунту.

+1

Напишите вопрос, который легко понятен? – naomik

ответ

3

Если столбец # не фиксируется, и вы просто хотите, чтобы захватить числа между < и > затем использовать:

awk -F '[<>]+' '{for (i=2; i<=NF; i+=2) if ($i ~ /^[0-9][0-9][0-9]+$/) print $i}' file 

Использование Grep -P (Perl регулярных выражений):

grep -oP '(?<=<)\d{3,}(?=>)' file 
+1

+1 Я не знал, что вы можете использовать что-то вроде '-F '[<>] +'' с awk. Очень круто. – naomik

+2

пс. он ищет цифры 3 цифры или более – naomik

+0

@naomik: О, хорошо спасибо, моя команда grep должна работать. Я также отредактирую команду awk. – anubhava

3

Найдет все строки, которые содержат 3 цифры или больше в your_file, то вывести номер

$ grep -P "<\d{3,}>" your_file | awk -F'[<> ]+' '{print $3}' 

Regular expression visualization


Учитывая этот файл,

text.... text... <1> text... 
text.... text... <2329> text... 
text.... text... <735> text... 
text.... text... <23229> text... 
text.... text... <2444> text... 

Выход

2329 
735 
23229 
2444 
+0

см. Мое редактирование. Я только хочу искать числа, которые находятся между <> скобками. Кроме того, grep отобразит все текстовые и выделенные совпадения. Мне нужны только найденные числа. Благодарю. – Steam

+1

upvote для крутой картинки. Как вы это сделали? – seanmcl

+1

Вы можете избежать переходов на awk и использовать переключатель '-o' в grep для захвата сопоставленной строки. – anubhava

1

Поскольку grep и awk уже приняты, вы можете использовать sed :)

sed -rn 's/.*<([0-9]{3,})>.*/\1/p' FILE 
+0

не работает. есть еще одна колонка, которая имеет только <42>. Колонка, в которой я нуждаюсь, имеет 3 числа или более. – Steam

+0

Исправлено. Хотя это и не кратчайшее решение ... – seanmcl

+0

Вы можете изменить шаблон: '. * <([0-9]{3,})>. *'. – jxh

Смежные вопросы