次のような私の前の質問、行をどのように維持しますか?単一N以外の遺伝子型?
A N N A N N A N N N N
N N N C N N N N N N N
N N N N N N G N N N N
N N N T N N N N N N N
G N N N G N N N N N N
C N N C N C N N N N N
私が望む出力:
N N N C N N N N N N N
N N N N N N G N N N N
N N N T N N N N N N N
答え1
sed -n '/^[N ]*[^N ][N ]*$/p' input.txt
N以外の文字を1つだけ含む行を印刷します。
または同じですが、異なる方法です。
sed '/[^N ][N ]*[^N ]/d; /^[N ]*$/d' input.txt
まず、複数行を含むすべての行を削除します。Nではない次の文字のみを含む行を削除してください。窒素数値。
答え2
grep -x '[N ]*[^N ][N ]*'
N以外の唯一のケース。
grep -v '[^N ].*[^N ]'
N以外の最大1つ(空行またはN
sのみを含む行とも一致)
入力にはPortable Character Setの文字のみが含まれているように見えるため、作業を高速化するためにロケールをCに変更することをお勧めします(LC_ALL=C grep...
)。
答え3
以下を含むスクリプトを生成できます。
#!/bin/sh
while read i
do
n=`echo $i | tr " " "\n" | uniq -c | grep "N" | awk '{print $1}'`
if [ "$n" == "10" ]
then
echo $i
fi
done < "$1"
次に、スクリプトに実行権限を付与します。
$ chmod +x myScript.sh
その後実行
$ ./myScript.sh myFile.txt
次いで、ライン内の所望のNの量を修正することができる。
if["$n"=="10"]
非常にエレガントではありませんが、作業が完了し、何も必要ありません。
答え4
もう一つのsed答え:
sed -n 'h; s/[N ]//g; /^.$/ {g; p}' file
それとも
awk '
{
n=0
for (i=1; i<=NF; i++) {
if ($i != "N") n++
if (n > 1) break
}
}
n == 1
' file