簡體   English   中英

bash刪除文件中包含來自另一個文件的行的行

[英]bash delete lines in file containing lines from another file

file1包含:

someword0
someword2
someword4
someword6
someword8
someword9
someword1

file2包含:

someword2
someword3
someword4
someword5
someword7
someword11
someword1

因此,我不會只包含file1中不包含file2的行。 我怎么能在bash中做到這一點?

答案是:

grep -v -x -f file2 file1

    -v for select non-matching lines
    -x for matching whole lines only
    -f f2 to get patterns from f2.

您可以使用grep -vf

grep -vwFf file2 file1
someword0
someword6
someword8
someword9

檢查man grep以獲得此處使用的所有grep選項的詳細信息。

您也可以使用comm命令:

comm -23 file1 file2

說明:

comm比較兩個文件並打印出來,分為三列,分別為file1,file2的行以及兩者的行。

使用選項-2和-3(或簡單地使用-23)可以禁止打印這些列,因此您僅獲得file1獨有的行。

如果行是唯一的,請進行左連接並過濾出兩個表中都存在的行。

join <(sort file1) <(sort file2) -o0,2.1 -a1 | awk '!$2'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM