Text-Processing
兩個文件之間的公共線
我在終端上執行了以下程式碼。
LC_ALL=C && grep -F -f genename2.txt hg38.hgnc.bed > hg38.hgnc.goi.bed
這並沒有給我兩個文件之間的共同點。我在那裡想念什麼?
用於
comm -12 file1 file2
獲取兩個文件中的公共行。您可能還需要對文件進行排序以
comm
按預期工作。comm -12 <(sort file1) <(sort file2)
來自
man comm
:-1 suppress column 1 (lines unique to FILE1) -2 suppress column 2 (lines unique to FILE2)
**或者使用
grep
**命令,您需要添加-x
選項以將整行匹配為匹配模式。該F
選項grep
將匹配模式作為字元串而不是正則表達式匹配。grep -Fxf file1 file2
或使用
awk
.awk 'NR==FNR{seen[$0]=1; next} seen[$0]' file1 file2
這是將file1
seen
的整行讀取到一個以鍵為整行的數組中呼叫(awk
代表整$0
行)。我們用作
NR==FNR
條件僅針對第一個輸入fle1而不是file2執行其後續塊,因為NR
inawk
指的是目前處理行號,並且FNR
指的是所有輸入中的目前行號。soNR
對於每個輸入文件FNR
都是唯一的,但對於所有輸入都是唯一的。
next
那裡告訴awk
不要繼續休息程式碼並重新開始,直到wanNR
不等於FNR
這意味著file1讀取的所有行awk
。然後 next
seen[$0]
只會為第二個file2執行,並且對於**file2中的每一行都將查看數組並列印該行在數組中確實存在的位置。另一個簡單的選擇是使用
sort
anduniq
:sort file1 file2|uniq -d
這將列印兩個排序的文件,然後
uniq -d
只列印重複的行。但是,當兩個文件本身都沒有重複的行時,這是授予的,否則即使兩個文件中都有重複的行,也始終授予以下權限。uniq -d <(sort <(sort -u file1) <(sort -u file2))