私はシェルスクリプトに初めてアクセスし、fastaファイルのヘッダー番号を順番に付けようとします。私のfastaファイルの順序は次のとおりです。
>Rodentia sp.
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN
>Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN
シェルスクリプトで awk を使用して ">" の後に 1 から n (n はシーケンス番号) まで数字を挿入し、ヘッダーに順番に番号を付けたいと思います。その後、シーケンスは次のようになります。
> 1 Rodentia sp.
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN
> 2 Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN
これを行うには、awkのサブ関数を使用して ">"の各インスタンスを "> [a number]"に置き換えました。
awk '/>/{sub(">", "> ++i ")}1' file
しかし、awkでsub関数を使用して変数を増やす方法を理解していません。 sub関数を使用してこれを行う方法があるかどうか疑問に思います。 subがどのように機能するかを理解していますが、変数が正しく増加するように宣言する方法がわかりません。
シェルスクリプトの先頭でiを1と宣言します。
i=1
ただし、サブ関数から得られた出力は次のようになります。
> ++$i Rodentia sp.
> ++$i Ovis aries
awk sub関数を使用してタイトルに番号を付けるために変数を正しく宣言するにはどうすればよいですか?
答え1
ほぼ終わりました。++i
引用符付き部分文字列の外側にある内容を"> ++i"
取得してください"> " ++i
。
awk '/^>/{sub(">", "> "++i " ")}1' infile
答え2
αГsнιnが指摘したように、++i
リテラル文字列の一部として挿入されます。
もっときれいに見えるもう一つの解決策:
awk -F '>' '/^>/ { $1 = "> " ++i } { print }' file.fa
{ print }
または略語を好む場合
awk -F '>' '/^>/ { $1 = "> " ++i } 1' file.fa
これは入力フィールド区切り文字として使用され、ヘッダー行の最初のフィールド(空の>
入力の前のビット)を目的の文字列に置き換えます。>