2013-11-22 43 views
1

我似乎無法繞過這個簡單的問題。 我需要打印所有在fileA中但不是int fileB的模式。從文件中找到不匹配的文件列表unix

考慮的fileA是因爲:

aaa 
bbb 
ccc 
ddd 

並考慮FILEB是因爲:

ppppppppppppp_aaa_ppppppppppppp 
ppppppppppppp_ccc_ppppppppppppp 
ppppppppppppp_ddd_ppppppppppppp 

我想以下結果:

bbb 

我已經試過

grep -f -v fileA fileB 
grep -F -v -f fileA fileB 

但它似乎不工作,因爲沒有打印。

如何在unix命令中實現此目的?

謝謝

+0

你可能有讀取文件中的每一行,檢查是否出現在文件B (單獨調用'grep')並進行適當的報告。有一些選項和技術可以抑制來自'grep'命令的噪音。 –

回答

1

試試這個:

#!/bin/bash 
exec < fileA 
while read line; do 
    grep -q "$line" fileB || echo "$line" 
done 
+1

我會建議,而不是'count'等簡單地說'grep -q「$ line」fileB ||回聲「$行」'。 – devnull

+0

@devnull - 非常好。你應該把它作爲另一個答案。 – EJK

1
awk -F'_' 'FNR==NR{a[$2]=$1;next}!(a[$0]){print}' fileB fileA 

如下測試:

> cat fileA 
ppppppppppppp_aaa_ppppppppppppp 
ppppppppppppp_ccc_ppppppppppppp 
ppppppppppppp_ddd_ppppppppppppp 
> cat fileB 
aaa 
bbb 
ccc 
ddd 
> awk -F'_' 'FNR==NR{a[$2]=$1;next}!(a[$0]){print}' fileA fileB 
bbb 
>