2013-02-06 114 views
1

匹配我有兩個文件,逗號分隔值,我想刪除文件1匹配所有的字符串處理字符串中的文件2.AWK:file2中打印字符串不是字符串文件2

file1: 
soap,cosmetics,june,hello,good 

file2: 
june,hello 

output: 
soap,cosmetics,good 

我想這一點,但不工作。我不確定我要去哪裏錯。任何幫助讚賞。

BEGIN { 
    FS="," 
} 

NR==FNR { 
    a[NR]=$0 
    next 
} 

{ 
    for (j=1;j<=NF;j++) { 
     split($0, d, ",") 
     if (d[j] in a == 0) { 
      line = (line ? line "," : "") d[j] 
     } 
    } 
print line 
line = "" 
} 
+0

+1您近距離了。只是一些小事情(重新策略)。請看我的答案。 – Steve

+0

解決這種問題的方法是將RS設置爲分隔您的記錄,然後用一個文件中的記錄填充數組,然後檢查另一個文件中的每條記錄是否已經存在於該數組中。 –

回答

3

下面是使用awk的一種方法。的script.awk

awk -f script.awk file2 file1 

內容:

BEGIN { 
    FS="," 
} 

FNR==NR { 
    for(i=1;i<=NF;i++) { 
     a[$i] 
    } 
    next 
} 

{ 
    for(j=1;j<=NF;j++) { 
     if (!($j in a)) { 
      r = (r ? r FS : "") $j 
     } 
    } 
} 

END { 
    print r 
} 

結果:像運行

soap,cosmetics,good 

另外,這裏是一個班輪:

awk -F, 'FNR==NR { for(i=1;i<=NF;i++) a[$i]; next } { for(j=1;j<=NF;j++) if (!($j in a)) r = (r ? r FS : "") $j } END { print r }' file2 file1 
1
$ gawk -v RS='[,\n]' 'NR==FNR{a[$0];next} !($0 in a){o=o s $0;s=","} END{print o}' file2 file1 
soap,cosmetics,good