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