我有两个文本文件:
File-1
:
PRKCZ
TNFRSF14
PRDM16
MTHFR
File-2
(包含两个制表符分隔的列):
atherosclerosis GRAB1|PRKCZ|TTN
cardiomyopathy,hypercholesterolemia PRKCZ|MTHFR
Pulmonary arterial hypertension,arrhythmia PRDM16|APOE|GATA4
现在,对于File-1
中的每个名称,还会打印匹配的File-2
中相应的疾病名称。所以输出将是:
PRKCZ atherosclerosis,cardiomyopathy,hypercholesterolemia
PRDM16 Pulmonary arterial hypertension,arrhythmia
MTHFR cardiomyopathy,hypercholesterolemia
我试过了代码:
$ awk '{k=$1}
NR==FNR{if(NR>1)a[k]=","b"="$1";else{a[k]="";b=$1}next}
k in a{print $0a[k]}' File1 File2
但我没有获得所需的输出。请有人纠正/帮助。
答案 0 :(得分:3)
您可以使用以下awk脚本执行此操作:
script.awk
BEGIN { FS="[\t]" }
NR==FNR { split($2, tmp, "|")
for( ind in tmp ) {
name = tmp[ ind ]
if (name in disease) { disease[ name ] = disease[ name ] "," $1 }
else { disease[ name ] = $1 }
}
next
}
{ if( $1 in disease) print $1, disease[ $1 ] }
像awk -f script.awk File-2 File-1
一样使用它(请先注意File-2
)。
<强>解释强>
BEGIN
块将标签设置为分隔符。NR == FNR
)执行File-2
块:它读取带有名称的疾病,拆分名称,然后将疾病附加到每个名称下的字典next
)仅执行最后一个块(由于前一个块中的File-1
):它输出存储在名称下的疾病(取自{{ 1}})