我的FILE1如下:
X<Test>::x
我有FILE2作为以粗体突出显示的ID列表:
CX 998900 998900 - CX:998900:998900:**ENSG00000000001:E4**:AAAT:4.468:A1
CX 998903 998903 - CX:998903:998903:**ENSG00000000001:E4**:CAAT:6.600:A1
CX 998889 998890 - CX:998889:998890:**ENSG00000000003:E5**:TAAT:7.523:A1
CX 998891 998891 - CX:998891:998891:**ENSG00000000003:E5**:TAAT:7.518:A1
CX 998881 998881 - CX:998881:998881:**ENSG00000000002:E6**:AAAT:4.468:A1
CX 998883 998883 - CX:998883:998883:**ENSG00000000003:E6**:AAAT:5.784:A1
CX 998880 998880 - CX:998880:998880:**ENSG00000000003:E6**:AAAT:5.784:A1
CX 998884 998884 - CX:998884:998884:**ENSG00000000003:E6**:TAAT:6.202:A1
我正在尝试使用以下awk命令从FILE1中的FILE2获取ID的二进制计数
ENSG00000000001:E4
ENSG00000000003:E5
ENSG00000000002:E6
ENSG00000000003:E6
ENSG00000000002:E5
这样我得到了
awk 'NR==FNR{a[NR]=$1;next} FNR==1 && f{print f;for(k in a) print a[k], a[k] in b; delete b}{b[$5]; f=FILENAME}END{print f; for(k in a) print a[k], a[k] in b; delete b}' FILE2 FILE1
答案 0 :(得分:2)
我认为你的计数已经关闭或者有一些未指明的情况
$ awk -F'**' -v OFS=':' 'NR==FNR{c[$2]++; next}
$1 in c{print $1,c[$1]; next}
{print $1,0} ' file1 file2
ENSG00000000001:E4:2
ENSG00000000003:E5:2
ENSG00000000002:E6:1
ENSG00000000003:E6:3
ENSG00000000002:E5:0
哦,我看到的不是计数而是一个指标,因为用c[$2]++
取代c[$2]=1
如果**
不属于该文件,则必须稍加更改
$ awk -F':' 'NR==FNR{c[$4 FS $5]=1; next}
$0 in c{print $0,c[$0]; next}
{print $0,0} ' file1 file2
ENSG00000000001:E4 1
ENSG00000000003:E5 1
ENSG00000000002:E6 1
ENSG00000000003:E6 1
ENSG00000000002:E5 0
这可以进一步简化,正如@fedorqui评论的那样。
$ awk -F':' 'NR==FNR{c[$4 FS $5];next} {print $0, $0 in c}' file1 file2
答案 1 :(得分:0)
让我们使用一些非智能的方法。也就是说,将file1中的每一行与整个file2相对应,并获得grep
的返回码:
while IFS= read -r line; do
printf "%s\t%d\n" "$line" "$(grep -q "$line" f1 && echo 1 || echo 0)"
done < f2