次のテキストファイルがあります。
UICEX_0001 UICEX_0001_T1.bam UICEX_0001_C2.bam chr1:16946335 chr19:9064309 chr8:10480278
UICEX_0003 UICEX_0003_T1.bam UICEX_0003_C2.bam chr1:16974893
この情報を使用して文字列を結合し、テキストファイルに情報を動的に入力して次のようなものを作成します。私が欲しい:
- 各行を繰り返します。
- 最初の3列を変数に代入
- この変数を使用していくつかのテキストを印刷します。
- 次に、4番目の最後の列を繰り返します。
- 具体的な内容を印刷してください。
私の出力ファイルの例は次のとおりです。
結果ファイル
load UICEX_0001_T1.bam
load UICEX_0001_C2.bam
goto chr1:16946335
collapse
snapshot UICEX_0001_chr1:16946335.png
goto chr19:9064309
collapse
snapshot UICEX_0001_chr19:9064309.png
goto chr8:10480278
collapse
snapshot UICEX_0001_chr8:10480278.png
load UICEX_0003_T1.bam
load UICEX_0003_C2.bam
collapse
snapshot UICEX_0003_chr1:16974893.png
私が試したこと
gawkコマンドをネストすると、これを行うことができるようです。私が試したことは次のとおりです。
SAMPLEFILE = "2016-10-13_mutation_table.txt"
gawk -F";" 'BEGIN{
gawk -F";" -v SAMPLE=$(cat $SAMPLEFILE | cut -d"\t" -f1) -v BAMT=$(cat $SAMPLEFILE | cut -d"\t" -f2) -v BAMN=$(cat $SAMPLEFILE | cut -d"\t" -f3);}{print "new \nload " $BAMN;}
{print "new \nload " $BAMT;}
{awk "{for(i=4; i<=NF-1; i++){ print "goto " $i ; print "collapse\nsnapshot " $SAMPLE"_"$i".png";} }" 2016-10-13_mutation_table.txt;
}END{print "exit \n"}'
ただし、このコマンドを実行すると、次のエラーが発生します。
gawk: cmd. line:2: gawk -F";" -v SAMPLE=$(cat $SAMPLEFILE | cut -d"\t" -f1) ...
gawk: cmd. line:2: ^ syntax error
ベストアンサー1
try this
$ awk '{printf("load %s\nload %s\n",$2,$3);for(i=4;i<=NF;i++){printf("goto %s\ncollapse\nsnapshot %s_%s.png\n",$i,$1,$i)}}' test.t
load UICEX_0001_T1.bam
load UICEX_0001_C2.bam
goto chr1:16946335
collapse
snapshot UICEX_0001_chr1:16946335.png
goto chr19:9064309
collapse
snapshot UICEX_0001_chr19:9064309.png
goto chr8:10480278
collapse
snapshot UICEX_0001_chr8:10480278.png
load UICEX_0003_T1.bam
load UICEX_0003_C2.bam
goto chr1:16974893
collapse
snapshot UICEX_0003_chr1:16974893.png