распечатать все до соответствия шаблону - PullRequest
1 голос
/ 18 октября 2010

У меня есть набор данных, который выглядит следующим образом:
фильм (год) жанр
например.

Некоторые слова (1934) Действие

Моя цель - захватить каждое поле «фильм», а затем проверить другой файл, в котором также есть группа фильмов, и удалить строки из второго файла, которые не содержат фильм. Я пытался использовать awk для этого, но смог соответствовать только полю года. Есть ли способ, которым я могу создать переменную для поля фильма? Мне кажется, что самый простой способ сделать это - сопоставить поле года и создать переменную из всего, что находится перед ней в каждой строке. Я не смог понять это, есть ли способ сделать это, который может быть проще, чем мое предложение?

Ответы [ 2 ]

3 голосов
/ 18 октября 2010

при условии, что ваш набор данных находится в файле

$ cat dataset
Terminator (19XX) action
The Ghostrider (2009) supernatural

$ awk -F"[()]" '{print $1}' dataset
Terminator
The Ghostrider

$ awk -F"[()]" '{print $1}' dataset > movie_names

$ grep -f movie_names secondfile
$ grep -f secondfile movie_names

Конечно, вы можете сделать это только с помощью awk

awk -F"[()]" 'FNR==NR { m[++d]=$1;next } { for(i=1;i<=d;i++){if( $0 ~ m[i] ){ print }}}' dataset secondfile
0 голосов
/ 18 октября 2010

Вы можете попросить sed удалить поле года и все, что будет после него.

$ cat file | sed 's/([0-9]\+).*//'

Это вернет только название фильма в каждой строке.Затем вы можете передать его в цикл while read;.

При необходимости вы можете уточнить регулярное выражение так, чтобы оно совпадало только с 4 цифрами (это будет соответствовать любому количеству цифр между символами).

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