gpt4 book ai didi

Linux - 在一个文件中搜索文本并加入另一个文件

转载 作者:太空狗 更新时间:2023-10-29 12:00:52 25 4
gpt4 key购买 nike

我有两个文本文件:

文件-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 将制表符设置为分隔符。
  • NR == FNR block 针对第一个参数 (File-2) 执行:它读取带有名称的疾病,拆分名称,然后附加疾病到每个名字下的字典
  • 最后一个 block 仅针对第二个参数 (File-1) 执行(由于前一个 block 中的 next):它输出存储的疾病在名字下(取自 $1)

关于Linux - 在一个文件中搜索文本并加入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com