2015-06-13 123 views
0

我有一個文件A中的主機名列表,並且還有一個文件包含文件BI中完整的主機名詳細信息,要刪除所有與B文件中的A主機相匹配的主機。任何執行此操作的簡短腳本這個?請讓我知道。在文件過濾中需要幫助

例:

cat A 
server1 
server2 
server3 
server4 

cat B 
server700 
server1 
server300 
server4 

所以在這裏A和B,Server1和服務器4是匹配的,所以我需要一個腳本,它會刪除所有匹配的服務器名稱fromB在文件

+0

請更具體一些。顯示文件和預期輸出的示例。 「B文件中的所有A主機匹配」是什麼意思? – choroba

+0

例如:貓 server1的 服務器2 服務器3 服務器4 B類 server700 server1的 server300 服務器4 所以在這裏A和B,Server1和服務器4是匹配的,所以我需要一個腳本,它刪除所有匹配兩個文件中的服務器 –

+0

編輯您的問題以包含此信息。使用鼠標選擇文本後,使用編輯框左上方的「{}」工具給它正確的格式。祝你好運。 – shellter

回答

1

這些東西線可能會幫助你。調整在grep命令的正則表達式就一定要只匹配在細節上的主機名文件:

cat file_with_hostnames | while read hname; do grep -q "$hname" file_with_host_details || echo $hname; done 
+0

嗨, 感謝您的答覆...請檢查下面的例子,讓我知道,如果你有建議,下面... 例如:貓 server1的 服務器2服務器3 服務器4 B類 server700 server1的 server300 服務器4 所以在這裏A和B,Server1和服務器4是匹配的,所以我需要一個腳本,它會從文件中的所有匹配的服務器名稱 –

1

東西也能像,

diff A B | grep "[>|<]" > temp_op 
cat temp_op | grep ">" | cut -f2 -d " " > new_B 
cat temp_op | grep "<" | cut -f2 -d " " > new_A 
+0

非常感謝,爲應答 –

+0

可否請你讓我知道什麼你的意思是[> | <]這個符號 –

+0

差異provi輸出格式爲>(數據不匹配file1)和<(數據不匹配file2),我們希望在一個文件中的數據,所以我們選擇與grep。 [> | <]此過濾器表示其中有< or >的行。在linux中嘗試diff命令 – user3347819

0
comm --output-delimiter="|" -3 A B|sed 's/^|//' 

注1:這需要GNU comm。 注2:comm(1)要求對文件進行排序。 注3:與'|'的怪異字符是因爲comm不允許空的output-delimiter。去搞清楚。