次のファイルがあります。
##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
結果を印刷します。