linux - 在 2 个文件中查找匹配项并打印匹配项上方的字段

标签 linux bash shell awk scripting

文件1:

2987571 2988014
4663633 4668876
4669084 4669827
4669873 4670130
4670212 4670604
4670604 4672469
4672502 4672621
4672723 4673088
4673102 4673518
4673521 4673895
4679698 4680174
5756724 5757680
5757937 5758506
5758855 5759202
5759940 5771528
5772524 5773063
5773005 5773106
5773063 5773452
5773486 5773776
5773836 5774189

文件2:

gene            complement(6864294..6865061)
                     /locus_tag="HCH_06747"
     CDS             complement(6864294..6865061)
                     /locus_tag="HCH_06747"
                     /codon_start=1
                     /transl_table=11
                     /product="hypothetical protein"
                     /protein_id="ABC33372.1"
                     /translation="MIKQLVRPLFTGKGPNFSELSAKECGVGEYQLRYKLPGNTIHIG
                     MPDAPVPARVNLNADLFDSYGPKKLYNRTFVQMEFEKWAYKGRFLQGDSGLLSKMSLH
                     IDVNHAERHTEFRKGDLDSLELYLKKDLWNYYETERNIDGEQGANWEARYEFDHPDEM
                     RAKGYVPPDTLVLVRLPEIYERAPINGLEWLHYQIRGEGIPGPRHTFYWVYPMTDSFY
                     LTFSFWMTTEIGNRELKVQEMYEDAKRIMSMVELRKE"
     gene            complement(6865197..6865964)
                     /locus_tag="HCH_06748"
     CDS             complement(6865197..6865964)
                     /locus_tag="HCH_06748"
                     /codon_start=1
                     /transl_table=11
                     /product="hypothetical protein"
                     /protein_id="ABC33373.1"
                     /translation="MIKQIVRPLFTGKGPNFSELNVKECGIGDYLLRYKLPGNTIDIG
                     MPDAPVPSRVNLNADLFDSYDPKKLYNRTFVQMEFEWWAYRGLFLQGDSGLLSKMSLH
                     IDVNRINPNSPLGGSDLESLETYLREDYWDYYEAEKNIDGVPGSNWQKRYDFDNPDEV
                     RAKGYIPVRRLVLVLLPEIYVKERINDVEWLHYSIDGEGIAGTNITYYWAYPLTNNYY
                     LTFSFRTTTELGRNEQRYQRMLEDAKQIMSMVELCKG"
     gene            complement(6865961..6867109)
                     /locus_tag="HCH_06749"
     CDS             complement(6865961..6867109)

这里的目标是获取第一个文件第一列的每个数字,并查看该数字是否出现在第二个文件中。如果是,我想打印 file2 中匹配项正上方的行:“/locus_tag”

例如,如果在 file1 中我们有 6864294,并且该数字也出现在 file2 上,那么我想打印:/locus_tag="HCH_06747"

最佳答案

这是一个粗略的示例:

awk '
NR==FNR {                                    # hash file 1 to a
    a[$1]
    next
}
{
    q=$0                                     
    while(match($0,/[0-9]+/)) {              # find all numeric strings
        if((substr($0,RSTART,RLENGTH) in a)) # test if it is in a
            print p                          # and output previous record p
        $0=substr($0,RSTART+RLENGTH)         # remove match from record
        }
    p=q                                      # store current record to p
}' file1 file2

                     /locus_tag="HCH_06747"

关于linux - 在 2 个文件中查找匹配项并打印匹配项上方的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695662/

相关文章:

linux - 执行 "font actual system"时 tkdiff 空白错误消息

python - 打印出文件中以字母表中的每个字母开头的单词的第一次出现

linux - 如何从 shell 脚本将凭据导出为环境变量?

shell脚本语法错误: Unexpected End of File

node.js - 捕获 npm 错误!从 shell 脚本运行 npm test 时

c - shell 如何处理重定向

linux - 从终端运行 emacs 作为单独的进程

c - 循环长度 - 时间控制 - C

c - 什么语言允许我与操作系统的内核交互

linux - 如何在unix中逐行分割给定的字符串