「#」または「chr1」で始まる行を抽出する方法

「#」または「chr1」で始まる行を抽出する方法

次のファイルがあります。

##Comment A
##Comment B
#Important header
chr1 content a
chr2 content b
chrX content x

#(##ではない)または「chr1」で始まる新しいファイルに3行と4行を抽出したいと思います。

#Important header
chr1 content a

~しようとする

grep "^[^##]"

ただし、これを行うと#が1つしかない行も除外されます。私はいつも2つのステップでこれを行うことができると思いますが、より良いソリューションが欲しいです!とても感謝しています。

答え1

2つのパターンをORで結ぶのはどうですか?

$ grep '^#[^#]\|^chr1' file
#Important header
chr1 content a

または(-e形式でPOSIXで指定)

$ grep -e '^#[^#]' -e '^chr1' file
#Important header
chr1 content a

答え2

常に異なる解決策があります。awk次のスクリプトを使用してこれを実行できます。

awk '{if( ($0~/^#/ && $0!~/^##/) || $0~/^chr1/){print $0}}' file

#最初の部分はで始まりますが、そうでない場合は行を探し、##2番目の部分はで始まる行を取得してchr1結果を印刷します。

関連情報