[英]How to compile a bunch of test C++ files at once with a Makefile in 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.