このようなファイルがあります。これは、タブで区切られた2つの列で構成されるファイルです。
CTGCAGTTTCCCCAAATGTGGGAAACTTGACTGTATAATTTGTGGCAGTGGTA a1
GATTTCCCCAAATGTGGGAAACTCACTCGGCAGGCGTTGATA a2
次のような出力を得たいと思います。
>a1
CTGCAGTTTCCCCAAATGTG
GGAAACTTGACTGTATAATT
TGTGGCAGTGGTA
>a2
GATTTCCCCAAATGTGGGAA
ACTCACTCGGCAGGCGTTGA
TA
内部で折りたたみコマンドを使用しようとしています。アッ。他のコマンドを使用できますかawk
?
また、各行の希望の幅は15なので、次のように試しましたが、うまくいきませんでした。
awk -F "\t" '{a=$(fold -w 50 $1);print a,$2}' file.txt
どうすればいいですか?
ベストアンサー1
これを行う方法はいくつかあります。
真珠
perl -ane '$F[0]=~s/.{15}/$&\n/g; print ">$F[1]\n$F[0]\n"' file
アッ
awk '{i=0; printf ">%s\n",$2; while(i<=length($1)){ printf "%s\n", substr($1,i,15);i+=15 }}' file
fold
本当にawkで使用したい場合は、これを行うことができます
awk '{printf ">%s\n",$2; system("echo " $1 "| fold -w 15 ") }' file
$()
あなたの試みは物ではなく殻であるため失敗しますawk
。内部でシステムコマンドを実行するawk
にはsystem()
。値$1
(シーケンス)の代わりにシェルの実際の文字列(これは$1
シェルがそれを評価しようとし、設定されていないため空白を返します)なので、引用符から除外する必要があります$1
。$1
したがって、この例では
|-------------------------> closing quotes for the 1st part
| |----> closing quotes for the 2nd part
v v
system( " echo " $1 " | fold -w 15")
- ---- --- - ------------
| | | | |----------> the 2nd part
| | | |------------------> opening quotes for the 2nd part
| | |---------------------> The awk variable, `$1`,
| | outside the quotes.
| |-----------------------------> The 1st part
|--------------------------------> opening quotes for the 1st part