0

コマンドログ ファイルがあり、表形式で情報を選択したいと考えています。入力は次のようになります。

####################################################################################################
# Starting pipeline at Mon Jul 29 12:22:56 CEST 2013
# Input files:  test.fastq
# Output Log:  .bpipe/logs/27790.log
# Stage Results
mkdir ./QC_graphics_results/


####################################################################################################
# Starting pipeline at Mon Jul 29 12:22:57 CEST 2013
# Input files:  test.fastq
# Output Log:  .bpipe/logs/27790.log
# Stage Statistics_graph_2
 fastqc test.fastq -o ./QC_graphics_results/
mv .QC_graphics_results/*fastqc .QC_graphics_results/fastqc


####################################################################################################
# Starting pipeline at Mon Jul 29 12:24:18 CEST 2013
# Input files:  test.fastq
# Output Log:  .bpipe/logs/27790.log
# Stage GC_content [all]
# Stage Dinucleotide_odds [all]
# Stage Sequence_duplication [all]
prinseq-lite.pl -fastq test.fastq -graph_data test.Dinucleotide_odds.gd -graph_stats dn -out_good null -out_bad null 
prinseq-lite.pl -fastq test.fastq -graph_data test.Sequence_duplication.gd -graph_stats da -out_good null -out_bad null
prinseq-lite.pl -fastq test.fastq -graph_data test.GC_content.gd -graph_stats gc -out_good null -out_bad null 

必要な出力は、次のように、各ステージとコマンドを含むテーブルになります。

    Stage result              mkdir./QC_grahics_results/
Stage Statistics_graph_2      fastqc test.fastq -o ./QC_graphics_results/
Stage GC_content [all]        prinseq-lite.pl -fastq test.fastq -graph_data test.GC_content.gd -graph_stats gc -out_good null -out_bad null
Dinucleotide_odds [all]       prinseq-lite.pl -fastq test.fastq -graph_data test.Sequence_duplication.gd -graph_stats da -out_good null -out_bad null
Stage Sequence_duplication [all]      prinseq-lite.pl -fastq test.fastq -graph_data test.GC_content.gd -graph_stats gc -out_good null -out_bad null

次のコードを使用して AWK を試してみましたが、うまくいきません。助言がありますか?

 cat commandlog.txt | awk '/^#\ Stage*/{print $0} !/^#.*/{print $0}' | awk '{ if ($0 ~ /^#*/){ if (b=1){next} else {a=$0 b=1 next;} else { if (NF!=0){func=$0 b=0 print $a\t$func\n}}' > ./statistic_files/user_options
4

2 に答える 2

1

これを awk0 という名前のファイルに保存します。

NF == 0 {次}

substr($1,1,1) == "#" && $2 != "ステージ" {次}

$2 == "ステージ" && NF == 3 {stage_name = $2 " " $3
                                        次 }

stage_name != "" {print stage_name, $0
                                        ステージ名 = ""
                                        次}

$2 == "ステージ" {arr[$3] = ""
                                        次}

                                      {
                                        {for (i in arr) {
                                           if (マッチ($0, i) != 0)
                                             print "ステージ", i, $0
                                                        };
                                         }
                                       }

次に、次のように実行します。 cat commandlog.txt | awk -f awk0 > ./statistic_files/user_options

出力:

ステージ結果 mkdir ./QC_graphics_results/
Stage Statistics_graph_2 fastqc test.fastq -o ./QC_graphics_results/
ステージ Dinucleotide_odds prinseq-lite.pl -fastq test.fastq -graph_data test.Dinucleotide_odds.gd -graph_stats dn -out_good null -out_bad null
ステージ Sequence_duplication prinseq-lite.pl -fastq test.fastq -graph_data test.Sequence_duplication.gd -graph_stats da -out_good null -out_bad null
ステージ GC_content prinseq-lite.pl -fastq test.fastq -graph_data test.GC_content.gd -graph_stats

幸運を!

于 2013-07-31T16:34:16.200 に答える
0

私は、単純なツールを使用した簡単な解決策のために問題が弱く形式化されていることに同意します.bashで次のようなことを試してください:

for x in $(awk '/Stage /{print $3}' file.txt);
do
  g=`grep "test.$x.gd" file.txt`;
  test -z "$g" && g=`awk "/Stage ${x}/,/##/" file.txt | grep -v '#'`
  echo -e "Stage $x\t$g";
done

段落からステージ名 (スペースなし) を取得し、それを-graph_dataパラメーター行にマップしようとします。一致するものが見つからない場合は、「ステージ名」宣言と次の開始段落の間の行を取得します (その段落と見なされます)。シーケンスから開始し##ます)。動作するはずです。

于 2013-07-31T13:59:41.487 に答える