gpt4 book ai didi

bash 从两个文件中获取信息

转载 作者:行者123 更新时间:2023-11-29 09:42:27 25 4
gpt4 key购买 nike

我有 file1:

NM_000014   A2M
NM_000015 NAT2
NM_000016 ACADM
NM_000017 ACADS
NM_000018 ACADVL
NM_000019 ACAT1
NM_000020 ACVRL1
NM_000021 PSEN1
NM_000022 ADA

和文件2:

NM_000019   
NM_000020
NM_000020
NM_12345

我需要从我的文件 1 中获取信息并将其放入文件 2 - 所以创建文件 3:

NM_000019   ACAT1
NM_000020 ACVRL1
NM_000020 ACVRL1
NM_12345 NO

注意 - 我无法更改原始排序顺序(因此不使用 comm 和 diff)。我在 file2 中有重复行 - 我需要保留它 (wc -l file2 == wc -l file3)。如果没有匹配 - 打印 NO

我有大约 70K 行,我不需要最快的解决方案。我的代码只能比较并打印相同的结果。

代码:

#!/bin/bash

while read -r c; do


grep $c file1 | uniq

done < file2 > file3

最佳答案

使用 awk:

$ awk 'NR==FNR{a[$1]=$2;next} {print ($1 in a?$1 OFS a[$1]:$1 OFS "NO")}' file1 file2
NM_000019 ACAT1
NM_000020 ACVRL1
NM_000020 ACVRL1
NM_12345 NO

解释:

NR==FNR{                                      # process the first file
a[$1]=$2 # hash records to a, $1 as key
next # skip to next record
}
{ # process the second file
print ($1 in a?$1 OFS a[$1]:$1 OFS "NO") # print hashed value if found or NO

# if($1 in a) # another way of saying above
# print $1, a[$1]
# else
# print $1, "NO"
}

关于bash 从两个文件中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644429/

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