Bash 打印所有内容以匹配图案

Bash 打印所有内容以匹配图案,bash,shell,awk,Bash,Shell,Awk,我有一个如下所示的数据集: 电影(年度)类型 比如说 一些词(1934)行动 我的目标是抓取每个“movie”字段,然后检查另一个文件,该文件也包含一组电影,并删除第二个文件中不包含电影的行。 我一直在尝试使用awk来实现这一点,但只能匹配year字段。有没有一种方法可以为电影字段创建变量?我觉得最简单的方法是匹配year字段,并从每行中前面的所有内容创建一个变量。我还没有弄明白,有没有比我的建议更简单的方法 假设数据集位于文件中 $ cat dataset Terminator (19XX)

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

一些词(1934)行动

我的目标是抓取每个“movie”字段,然后检查另一个文件,该文件也包含一组电影,并删除第二个文件中不包含电影的行。
我一直在尝试使用awk来实现这一点,但只能匹配year字段。有没有一种方法可以为电影字段创建变量?我觉得最简单的方法是匹配year字段,并从每行中前面的所有内容创建一个变量。我还没有弄明白,有没有比我的建议更简单的方法

假设数据集位于文件中

$ 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

awk-F“[()]”FNR==NR{m[++d]=$1;next}{for(i=1;i您可以要求
sed
删除年份字段及其后面的所有内容

$ cat file | sed 's/([0-9]\+).*//'
这将只返回每行电影的名称。然后,您可以在读取时将其导入
循环中;
循环


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

太好了!不知道-F接受正则表达式。您可以在一个命令行中将其组合为“awk-F”[()]“{print$1}”“dataset | fgrep-f-secondfile。这样,您就不需要临时文件名。谢谢您的回答,这正是我所需要的。@raha我必须尝试一下oneliner,看起来它会很好地工作