如果文件中的字符与提供的模式不同,则停止计数

stop counting if diff character in the file from the provided patterns

我正在尝试创建一个脚本来计算某些模式,例如 aac tgt ttg。通常,DNA 文件应该是包含有效 DNA 字符串的文本文件,其中没有换行符或任何类型的白色 space 字符。 (它将以换行符结束。)这个 DNA 文件应该只包含碱基 a、c、g 和 t 的任意顺序序列。

#! /bin/bash
   diffchar=$(grep -cv 'aac\|gtt\|tgt\|cag'  )
if  [[ $diffchar -eq 1 ]]
then
echo "error"

elif  [[  $diffchar -ne 1 ]]
then

         
        count=$(grep -o 'aac\|gtt\|tgt\|cag'  | sort -k1,1nr -k2,2 | uniq -c)
#       newcount=$(tr -d '\n' $count | awk -f histogram.awk | sort | uniq -c)

#       echo "$newcount"
        echo $count 
fi

由于您所有的搜索模式都是 3 个字符长,您可以将文件分成 3 个字符的块并使用惯用语 sort | uniq -c 创建直方图。

sed '1s/.../\n&/g' yourFile | sed 1d | sort | uniq -c

以上命令打印类似

的内容
  1 aac
  5 cag
  1 gtt
  3 tgt
  1 XYZ

对于不属于您的模式的所有内容(在本例中为XYZ),您可以使用

自动抛出错误
histogram=$(sed '1s/.../\n&/g' yourFile | sed 1d | sort | uniq -c)
if echo "$histogram" | grep -vEq '^[0-9 ]+(aac|gtt|tgt|cag)$'; then
  echo error
else
  echo "$histogram"
fi