我有一个文件列表
$ls
reads_string1
reads_string2
reads_string3
我想搜索并计算string1
中reads_string1
的{{1}},string2
中的reads_string2
以及{2}中string3
中reads_string3
的出现次数,6,10,...,N,每个相应的文件(因此下面使用awk)
要做到这一点,我希望能够通过两个xargs传递xargs模式。这是我目前的非工作“解决方案”。
ls reads_* | cut -d"_" -f2 | xargs -I pattern awk '{if (NR % 2 == 0 && NR % 4 != 0){print}}' reads_pattern | xargs grep -Hc "^pattern" reads_pattern
有没有办法将模式从第一个xargs传递到第二个xargs?
答案 0 :(得分:0)
只有awk才能实现这一目标:
awk '{
f=FILENAME;
gsub('/^.*_/',"",f);
if(FNR%4==2 && $0 ~ "^"f )
{a[f]++
}
}
END{
for (i in a){
print i,a[i]
}
}' reads_*
这将使用awk buildin变量FILENAME
并将其解析为变量f
以获取string1
,string2
等。
然后,如果FNR
的模数4等于2(与行号2,6,10相匹配),则该行以f
开头(string1
},string2
用于currespnigng文件),索引为a
的数组f
中的值加1。
最后打印索引以及带有该索引的数组,即count。