2013-05-24 3 views
0

У меня есть файл, который включают в себя следующие строки:Баш - извлекая строки, содержащие только 3 колонки

2 | бла | blah
1 | бла | blah
3 | blah
2 | бла | blah
1 | высокий | пять
3 | пять

Я хочу извлечь только строки, которые имеет 3 колонки (3 поля, 2 ... сепаратора обеспечивают)
Я хочу, чтобы это труба из следующих команд:

| sort -nbsk1 | cut -d "|" -f1 | уник -d

Так ведь я буду получать только:

Любые предложения? Это часть домашнего задания, мы не имеем права использовать AWK \ СЕПГ и еще несколько команд .. (Grep \ тр и Что написано выше, могут быть использованы)

Благодаря

+0

Если это домашняя работа, что вы попробовали? – devnull

+0

Я попытался проверить это по строкам, а не сортировать. Значительно менее «дружелюбный», а затем проверял отсортированный и готовый список –

ответ

0

grep '.*|.*|.*' подберет линии с по крайней мере, три полей и двух сепараторов.

+0

Могу ли я передать его командам, написанным выше? –

+0

, но не 'извлекать только строки, содержащие 3 столбца, например. 'a | b | c | d' также будет соответствовать. он делает это жадным способом. – Kent

+0

да, @Kent, я постараюсь улучшить его. – tarrsalah

1

поскольку вы сказали Grep разрешено :

grep -E '^([^|]*\|){2}[^|]*$' file 
+0

+1 для элегантности. – tarrsalah

+0

@tarrsalah thx. для требования OP, я думаю, 'grep '|. * |' 'работает тоже. – Kent