複数のgrepでパターンごとに別々の結果を取得する方法

複数のgrepでパターンごとに別々の結果を取得する方法

14種類のパターンで100個のファイルを検索したいです。今まで試したこと

cat s_3_2_*_qseq.txt | grep  -c  'pattern1\|pattern2\|pattern3\|pattern4\|pattern5\|...pattern14'

これは私に各ファイルのすべてのパターンの数を与えます

    s_3_3_001_qseq.txt:12
    s_3_3_002_qseq.txt:15
    .

    s_3_3_0068_qseq.txt:5

次のように各モードの結果を個別に確認したいと思います。

file                  pattern1   pattern2   .....   pattern14
s_3_3_001_qseq.txt:    0         2                  5
s_3_3_002_qseq.txt:    7         1                  3
.
.
s_3_3_0068_qseq.txt:   1         2                  1

これをどのように行うべきかについてのアイデアがあれば、Unix、Perl、またはPythonのソリューションが良いでしょう。

ベストアンサー1

awkソリューション - コードを整理または短縮できます。確信しています。

$ cat file1
pat1
pat2
pat1

$ cat file2
pat2
pat2
pat1

$ awk -f  1.awk file1 file2

file          pat1      pat2        
file1       2       1       
file2       1       2       

$ cat 1.awk
BEGIN{
  pat["pat1"]="pat1"; 
  pat["pat2"]="pat2"; 
  file["file1"]="file1"; 
  file["file2"]="file2"
} 

{
  for (i in pat) {
    if ($0 ~ i) pat_count[FILENAME,i]++ 
  } 
} 
END {
  printf("file\t\t")
  for(i in pat) {
    printf("%s\t\t",i)
  }
  printf("\n")

  for (i in file) {
    printf("%s\t\t",i) 
      for(j in pat) {
        printf("%d\t\t",  pat_count[i,j])
      } ; printf("\n") 
  }
}

おすすめ記事