我有两个文本文件:
文件 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
但我没有得到想要的输出。任何人都可以纠正/帮助吗?
最佳答案
您可以使用以下 awk 脚本来完成此操作:
脚本.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
block 将制表符设置为分隔符。- 针对第一个参数 (
File-2
) 执行NR == FNR
block :它读取带有名称的疾病,拆分名称,然后附加疾病到字典中的每个名字下 - 最后一个 block 仅针对第二个参数 (
File-1
) 执行(由于前一个 block 中的next
):它输出存储的疾病名字下(取自$1
)
关于Linux - 搜索文件中的文本并加入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218609/