打印所有内容以匹配模式

时间:2010-10-18 02:34:03

标签: bash shell awk

我有一个如下所示的数据集:
电影(年)类型
例如。

有些话(1934)行动

我的目标是获取每个“电影”字段,然后检查另一个也有一堆电影的文件,并删除第二个文件中不包含电影的行。 我一直在尝试使用awk来做到这一点,但只能匹配年份字段。有没有办法可以为电影领域创建变量?我觉得最简单的方法是匹配年份字段,并从每行中的所有内容创建一个变量。我无法解决这个问题,有没有办法做到这一点可能比我的建议更容易?

2 个答案:

答案 0 :(得分:3)

假设您的数据集在文件中

$ 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

答案 1 :(得分:0)

您可以要求sed删除年份字段及其后的所有内容。

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

这只会返回每行电影的名称。然后,您可以将其传输到while read;循环。

如果需要,您可以优化正则表达式,使其仅匹配4位数(此位数将匹配parens之间的任意位数)。