通过多个xargs传递-I模式

时间:2016-02-18 12:19:30

标签: grep sh xargs

我有一个文件列表

$ls
reads_string1
reads_string2
reads_string3

我想搜索并计算string1reads_string1的{​​{1}},string2中的reads_string2以及{2}中string3reads_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?

1 个答案:

答案 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以获取string1string2等。

然后,如果FNR的模数4等于2(与行号2,6,10相匹配),则该行以f开头(string1 },string2用于currespnigng文件),索引为a的数组f中的值加1。

最后打印索引以及带有该索引的数组,即count。