簡體   English   中英

如何在Linux中將一個文件與一堆文件進行比較

[英]How to compare one file with bunch of files in linux

我有一個fileA,如下所示:

file A

chr1   123 aa b c d
chr1   234 a  b c d
chr1   345 aa b c d
chr1   456 a  b c d
....

而且我在dirB中有一堆相似的文件,它們具有相似的列,我必須與之比較文件A。

為此,我使用cat將dirB中的所有文件串聯到一個名為fileB的文件中,然后根據鍵列1和2比較這兩個文件,如下所示:

awk 'FNR==NR{a[$1,$2]++;next}!a[$1,$2]' fileB fileA

此命令將第1列和第2列用作鍵,並給出僅在fileA中具有鍵的行。

但是,這里的問題是,fileB在存在大量文件時要處理的空間和要運行的內存很大。

有人可以提出一個替代方案,以便跳過連接所有文件以創建fileB的步驟。 相反,可以將fileA與dirB中的所有文件直接比較

chr1   123    aa    b    c    d    xxxx    abcd
chr1   234    a     b    c    d
chr1   345    aa    b    c    d    yyyy    defg
chr1   456    a    b    c    d

也許遵循以下思路:

 awk 'NR == FNR { a[$1,$2] = $0; next } 
                { delete a[$1, $2] }
            END { for (i in a) print a[i] }
 ' a.txt b1.txt b2.txt ...

從文件A開始,將每個鍵及其值所在行的內容添加到數組。 然后,對於所有B文件,使用匹配鍵從數組中刪除任何元素。 最后,剩下的所有元素都是A中的元素,而B文件中沒有這些元素,因此我們可以循環遍歷並打印出來。

暫無
暫無

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

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