2010-10-18 59 views
1

匹配我有一個數據集,看起來像下面這樣:
電影(年)流派
例如。打印一切高達模式

一些字(1934)行動

我的目標就是抓住每一個「電影」字段,然後檢查不同的文件也有一堆電影和刪除不包含第二個文件中的行電影。 我一直在嘗試使用awk來做到這一點,但只能匹配年份字段。有沒有一種方法可以爲電影字段創建一個變量?我覺得最簡單的方法是匹配年份字段,並根據每行中所有內容創建一個變量。我一直無法弄清楚,有沒有辦法做到這一點,可能比我的建議更容易?

回答

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 
+0

太棒了!不知道-F接受正則表達式。您可以在一個命令行中將它組合爲「awk -F」[()]「{print $ 1}」數據集| fgrep -f - secondfile。這樣,您不需要臨時文件movie_names – 2010-10-18 02:54:59

+0

感謝您的回答,這正是我所需要的。 @raha我將不得不嘗試那個oneliner,看起來它會很好地工作 – Isawpalmetto 2010-10-18 12:26:31

0

你可以問sed除去一年領域做到這一點,在於這一切之後。

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

這將只返回每行上的電影名稱。然後,您可以將其輸入到while read;循環中。

如果需要,您可以改進正則表達式,使其僅匹配4位數字(這將匹配parens之間的任意數字位數)。