次の形式の大きなテキストDNA配列ファイルがあります。
>name
AACTGGGCT
>で始まらない行は変更せずに残し、追加情報と特殊文字を使用して現在の名前行を解析する必要があります。
以下があります(「D 3」の間にスペースではなくタブ文字です)。
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
考える:
>3931
GACAAACGCTGGCGGGTGCATGAG
最初の部分を削除しようとしましたが、sed 's/\>*[[:blank:]]/>/g'
動作しません。gawk
最後にパイプと数字を削除できますか?
答え1
使用awk
:
awk -F'[| ]' '{if ( $1 ~ /^>/ ) print ">"$2; else print $0}' file
>3931
GACAAACGCTGGCGGGTGCATGAG
パイプの前の最初の文字列の終わりと数値セットの先頭の間のスペースがaのTab代わりにaの場合、Spaceフィールド区切り文字を設定する正規表現はです[|\t]
。
答え2
sedソリューション:
sed '/^>/s/>.* \([0-9]*\)|.*/>\1/' < existing-file > new-file
これは、その後のコマンドが>で始まる入力行でのみ機能するようになります/^>/
。sed
答え3
その他sed
:
$ sed -e 's/[^>].* \([0-9]*\)|.*/\1/' file
>3931
GACAAACGCTGGCGGGTGCATGAG
答え4
sed 's/>.* />/;s/|.*//
' <<\DATA
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
DATA
出力
>3931
GACAAACGCTGGCGGGTGCATGAG