如何在两个目录中使用awk进行多个文件搜索,仅从第二个目录中具有匹配字符串的文件中打印记录

摩哥

重做上一个问题,以便更清楚。我试图在两个目录中搜索文件,并且将匹配的字符串(紧随其后的+行)从第二个目录打印到新文件中,前提是它们与第一个目录中的记录匹配。我发现了类似的示例,但没有完全相同的示例。我不知道如何使用awk来处理来自不同目录的多个文件,而我已经折磨自己,试图找出答案。

目录1,28,000个文件,格式为viz。

>ABC
KLSDFIOUWERMSDFLKSJDFKLSJDSFKGHGJSNDKMVMFHKSDJFS
>GHI
OOILKJSDFKJSDFLMOPIWERIOUEWIRWIOEHKJTSDGHLKSJDHGUIYIUSDVNSDG

目录2,共15个文件,格式为viz。

>ABC
12341234123412341234123412341234123412341234123412341234123412341234
>DEF
12341234123412341234123412341234
>GHI
12341234123412341234123412341234123412341234123412341234123412341234123412341234

所需的输出:

>ABC
12341234123412341234123412341234123412341234123412341234123412341234
>GHI
12341234123412341234123412341234123412341234123412341234123412341234123412341234

目录1和2位于我的主目录中:(./Test1&./Test2)

如果有人可以建议命令指定不同的目录,我将不胜感激!当前,当我包含文件路径(例如/Test1/*.fa)时,出现以下错误:

awk: can't open file /Test1/*.fa
埃德·莫顿

您将需要以下内容(未经测试):

awk '
FNR==1 {
    dirname = FILENAME
    sub("/.*","",dirname)
    if (NR==1) {
        dirname1 = dirname
    }
}
dirname == dirname1 {
    if (FNR % 2) {
        key = $0
    }
    else {
        map[key] = $0
    }
    next
}
(FNR % 2) && ($0 in map) && !seen[$0,map[$0]]++ {
    print $0 ORS map[$0]
}
' Test1/* Test2/*

鉴于您收到错误消息/usr/bin/awk: Argument list too long,这意味着您超出了命令的外壳程序最大参数长度,并且您的Test1目录中有28,000个文件,请尝试以下操作:

find Test1 -type f -exec cat {} \; |
awk '
NR == FNR {
    if (FNR % 2) {
        key = $0
    }
    else {
        map[key] = $0
    }
    next
}
(FNR % 2) && ($0 in map) && !seen[$0,map[$0]]++ {
    print $0 ORS map[$0]
}
' - Test2/*

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档