在 Linux 中從另一個檔案 A 中移除在檔案 B 中出現的所有行
您可以使用 Linux 中的 grep 命令從檔案 A 中移除在檔案 B 中出現的所有行。
基本語法如下:
grep -v -f fileB.txt fileA.txt > outputFile.txt
此命令使用 -v 選項反轉匹配,以便它返回與檔案 B 中不匹配的行。-f 選項指定包含要匹配的模式的檔案。輸出重定向到一個名為 outputFile.txt 的新檔案。
或者,您可以使用 sed 命令
sed -i '/$(grep -f fileB.txt fileA.txt)/d' fileA.txt
此命令使用 -i 選項就地編輯檔案,/.../d 指定應刪除與模式匹配的行。
您還可以使用 awk 命令
awk 'FNR==NR{a[$0];next} !($0 in a)' fileB.txt fileA.txt > outputFile.txt
此命令比較 fileB.txt 和 fileA.txt,並將 fileA.txt 中不存在於 fileB.txt 中的行列印到 outputFile.txt 中。
使用 comm 和 sort 命令
您可以使用 Linux 中的 comm 和 sort 命令從檔案 A 中移除在檔案 B 中出現的所有行。
首先,您需要對這兩個檔案進行排序:
sort fileA.txt > fileA_sorted.txt sort fileB.txt > fileB_sorted.txt
然後,使用 comm 命令比較這兩個排序後的檔案:
comm -23 fileA_sorted.txt fileB_sorted.txt > outputFile.txt
-23 選項告訴 comm 只打印 file A 中獨有的行(在檔案 B 中未出現的所有行)。輸出重定向到一個名為 outputFile.txt 的新檔案。
或者,您也可以使用
comm -13 fileA_sorted.txt fileB_sorted.txt > outputFile.txt
這將只打印出現在檔案 A 中但未出現在檔案 B 中的行。
需要注意的是,在使用 comm 命令之前,這兩個檔案都需要進行排序。
使用 join 和 sort 命令
您可以使用 Linux 中的 join 和 sort 命令從檔案 A 中移除在檔案 B 中出現的所有行。
首先,您需要對這兩個檔案進行排序:
sort fileA.txt > fileA_sorted.txt sort fileB.txt > fileB_sorted.txt
然後,使用 join 命令比較這兩個排序後的檔案:
join -v 1 fileA_sorted.txt fileB_sorted.txt > outputFile.txt
-v 1 選項告訴 join 只打印 file A 中獨有的行(在檔案 B 中未出現的所有行)。輸出重定向到一個名為 outputFile.txt 的新檔案。
或者,您也可以使用
join -v 2 fileA_sorted.txt fileB_sorted.txt > outputFile.txt
這將只打印出現在檔案 B 中但未出現在檔案 A 中的行。
需要注意的是,在使用 join 命令之前,這兩個檔案都需要進行排序,並且 join 命令需要有一個公共欄位,如果檔案沒有任何公共欄位,則需要在使用命令之前新增它。
使用 grep 命令
您可以使用 Linux 中的 grep 命令從檔案 A 中移除在檔案 B 中出現的所有行。
基本語法如下:
grep -v -f fileB.txt fileA.txt > outputFile.txt
此命令使用 -v 選項反轉匹配,以便它返回與檔案 B 中不匹配的行。-f 選項指定包含要匹配的模式的檔案。輸出重定向到一個名為 outputFile.txt 的新檔案。
或者,您也可以使用
grep -vxf fileB.txt fileA.txt > outputFile.txt
此命令也使用 -v 選項反轉匹配,並使用 -x 選項匹配整行,並使用 -f 選項指定包含要匹配的模式的檔案。
需要注意的是,如果這兩個檔案中的行都是唯一的,則此命令效果最佳,如果檔案包含重複行,則最終可能會刪除您希望保留在輸出檔案中的行。
使用 awk 命令
您可以使用 Linux 中的 awk 命令從檔案 A 中移除在檔案 B 中出現的所有行。
基本語法如下:
awk 'FNR==NR{a[$0];next} !($0 in a)' fileB.txt fileA.txt > outputFile.txt
此命令比較 fileB.txt 和 fileA.txt,並將 fileA.txt 中不存在於 fileB.txt 中的行列印到 outputFile.txt 中。
或者,您也可以使用:
awk 'NR==FNR{a[$0];next} !($0 in a)' fileB.txt fileA.txt > outputFile.txt
此命令也比較 fileB.txt 和 fileA.txt,並將 fileA.txt 中不存在於 fileB.txt 中的行列印到 outputFile.txt 中。
需要注意的是,如果這兩個檔案中的行都是唯一的,則此命令效果最佳,如果檔案包含重複行,則最終可能會刪除您希望保留在輸出檔案中的行。
結論
在 Linux 中,有多種方法可以從檔案 A 中移除在檔案 B 中出現的所有行,例如使用 grep、comm、join、sed 和 awk 命令。grep 命令使用 -v 選項反轉匹配,並使用 -f 選項指定包含要匹配的模式的檔案。comm、join 命令要求在使用命令之前對這兩個檔案進行排序。sed 命令使用 -i 選項就地編輯檔案,/.../d 指定應刪除與模式匹配的行。awk 命令使用 FNR==NR{a[$0];next} !($0 in a) 或 NR==FNR{a[$0];next} !($0 in a) 比較檔案 B 和檔案 A,並將檔案 A 中不存在於檔案 B 中的行列印到 outputFile.txt 中。需要注意的是,如果這兩個檔案中的行都是唯一的,則所有這些命令效果最佳,如果檔案包含重複行,則最終可能會刪除您希望保留在輸出檔案中的行。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP