我有兩個csv檔案:
$ cat file1
ENST00000423372.3|ENSG00000237683.5|-|-|AL627309.1-201|AL627309.1|2661|UTR5:1-70|CDS:71-850|UTR3:851-2661| 52.6643
ENST00000332831.2|ENSG00000185097.2|OTTHUMG00000002581.1|OTTHUMT00000007334.1|OR4F16-001|OR4F16|995|UTR5:1-19|CDS:20-958|UTR3:959-995| 0.034
ENST00000599533.1|ENSG00000269831.1|-|-|AL669831.1-201|AL669831.1|129|CDS:1-129| 8.3949
ENST00000281156.4|ENSG00000112232.8|OTTHUMG00000014936.2|OTTHUMT00000041066.2|KHDRBS2-001|KHDRBS2|2332|UTR5:1-279|CDS:280-1329|UTR3:1330-2332| 3.3232
和檔案2(以制表符分隔),其最后一列有這個基因名稱。
$ cat -A file2
chr5^I57444505^I57444664^I ^IIntergenic^IIntergenic^I-26416^INR_104669^I^ILINC02101$
chr6^I62712636^I62712786^I ^Iintron (NR_146874, intron 3 of 13)^IAT_rich|Low_complexity|Low_complexity^I283419^INR_146874^IENSG00000112232^IKHDRBS2$
chr13^I98046123^I98046340^I ^I3' UTR (NM_001306070, exon 8 of 8)^I3' UTR (NM_001306070, exon 8 of 8)^I-40192^INM_021033^IENSG00000125249^IRAP2A$
chr6^I138854092^I138854316^I ^Iintron (NM_020464, intron 1 of 6)^Iintron (NM_020464, intron 1 of 6)^I-33573^INM_001144060^IENSG00000135540^INHSL1$
chr14^I98430462^I98430676^I ^Iintron (NR_152748, intron 2 of 2)^Iintron (NR_152748, intron 2 of 2)^I13892^INR_152746^IENSG00000246223^ILINC01550$
chr11^I10444849^I10445062^I ^Iintron (NR_103765, intron 3 of 3)^IL1PA7|LINE|L1^I-26913^INM_001172431^IENSG00000133805^IAMPD3$
chr12^I50549011^I50549204^I ^Iintron (NM_001331069, intron 1 of 11)^Iintron (NM_001331069, intron 1 of 11)^I12045^INM_001331073^IENSG00000139624^ICERS5$
chrX^I154682687^I154682793^I ^IIntergenic^ITHE1B|LTR|ERVL-MaLR^I-4438^INR_036260^IENSG00000221603^IMIR1184-3$
我想要一個腳本來檢查第一個檔案中的基因名稱,并在第二個檔案中尋找相同的基因名稱,如果匹配,則生成一個包含兩個數值的檔案。 輸出應該是這樣的
KHDRBS2 3.3232我寫了一個awk腳本 :
awk -F"|" 'FILENAME=="file1"{A[1]=$1}'。FILENAME=="file2"{if(A[$10]==$10){print}}'
但它并沒有產生任何輸出結果。誰能幫幫我,告訴我哪里錯了?
謝謝你。
uj5u.com熱心網友回復:
你可以使用這個awk解決方案:
awk -F '|'/span> 'FNR == NR {map[6] = $NF; next}
$NF in map {print $10, map[10]}' file1 FS=' ' file2
KHDRBS2 3.3232
uj5u.com熱心網友回復:
從OP的cat -A file2重建file2:
$ vi file2.raw # cut-n-pasted OP的'cat -A file2'到我的'file2.raw'。
$ sed 's/^I/ /g;s/$/' file2.raw > file2
由于兩個輸入檔案有不同的定界符(file1定界符=|; file2定界符=),我們將跳過使用awk -F標志,而是使用幾個split()呼叫來把行分成組件。
一個awk想法:
awk '.
# 處理第一個檔案
FNR==NR { split($0,x,"|")
基因=x[6]
value=x[11]
genes[gene]=value
下一個
}
# 處理第二個檔案
{ split($0,x," ")
gene=x[10]
if ( genes中的gene )
print gene,genes[gene] 。
}
' file1 file2
注意:通過取消gene和value變數,直接參考x[]條目,可以減少代碼
這樣就產生了:
KHDRBS2 3.3232
uj5u.com熱心網友回復:
你可以轉換為相同的分隔符,然后保留第一個檔案的資料,并從第二個檔案中列印。
給定:
cat file_1
ENST00000423372.3|ENSG00000237683.5|-|-|AL627309.1-201|AL627309.1|2661|UTR5:1-70|CDS:71-850|UTR3:851-2661| 52.6643
ENST00000332831.2|ENSG00000185097.2|OTTHUMG00000002581.1|OTTHUMT00000007334.1|OR4F16-001|OR4F16|995|UTR5:1-19|CDS:20-958|UTR3:959-995| 0.034
ENST00000599533.1|ENSG00000269831.1|-|-|AL669831.1-201|AL669831.1|129|CDS:1-129| 8.3949
ENST00000281156.4|ENSG00000112232.8|OTTHUMG00000014936.2|OTTHUMT00000041066.2|KHDRBS2-001|KHDRBS2|2332|UTR5:1-279|CDS:280-1329|UTR3:1330-2332| 3.3232
cat file_2
chr5^I57444505^I57444664^I ^IIntergenic^IIntergenic^I-26416^INR_104669^I^ILINC02101$
chr6^I62712636^I62712786^I ^Iintron (NR_146874, intron 3 of 13)^IAT_rich|Low_complexity|Low_complexity^I283419^INR_146874^IENSG00000112232^IKHDRBS2$
chr13^I98046123^I98046340^I ^I3" UTR (NM_001306070, exon 8 of 8)^I3" UTR (NM_001306070, exon 8 of 8)^I-40192^INM_021033^IENSG00000125249^IRAP2A$
chr6^I138854092^I138854316^I ^Iintron (NM_020464, intron 1 of 6)^Iintron (NM_020464, intron 1 of 6)^I-33573^INM_001144060^IENSG00000135540^INHSL1$
chr14^I98430462^I98430676^I ^Iintron (NR_152748, intron 2 of 2)^Iintron (NR_152748, intron 2 of 2)^I13892^INR_152746^IENSG00000246223^ILINC01550$
chr11^I10444849^I10445062^I ^Iintron (NR_103765, intron 3 of 3)^IL1PA7|LINE|L1^I-26913^INM_001172431^IENSG00000133805^IAMPD3$
chr12^I50549011^I50549204^I ^Iintron (NM_001331069, intron 1 of 11)^Iintron (NM_001331069, intron 1 of 11)^I12045^INM_001331073^IENSG00000139624^ICERS5$
chrX^I154682687^I154682793^I ^IIntergenic^ITHE1B|LTR|ERVL-MaLR^I-4438^INR_036260^IENSG00000221603^IMIR1184-3$
你可以做到:
awk -F "|" 'FNR==NR{arr[6] =$11; next}
1美元在arr{print 1, arr[1]}中
' file_1 <(awk -F "^" '{print substr($NF, 2, length($NF) - 2)}' file_2)
KHDRBS2 3.3232
如果檔案2是與^分開的,就用這個分隔符代替。我有一行substr($NF, 2, length($NF) - 2)處理第二個檔案,因為你似乎在該檔案中有一個額外的I和$。據此進行調整。
我意識到在檔案2中有
|。在這種情況下,這并不重要,因為我們只是在使用最后一個欄位。
如果你是在檔案2中參考一個有編號的欄位,并且這種變化會成為一個問題,你可以在一些其他的分隔符上實作標準化(比如):
awk -F " " 'FNR==NR{arr[6]=$11; next}
$NF in arr{print $NF, arr[$NF]}。
' <(awk 'BEGIN{FS="|"; OFS=" "}$1=$1' file_1)
<(awk 'BEGIN{FS="^I"; OFS=" "} {sub(/$$/,"")}$1=$1' file_2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/327674.html
標籤:
