2013-07-31 3 views
0

У меня есть файл commandlog, и я хочу выбрать некоторую информацию в формате таблицы. Вход, как это:awk: создать таблицу из файла

#################################################################################################### 
# 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 
+1

Последний набор результатов этапа состоит из трех этапов, и результаты находятся в произвольном порядке. Отправьте полный ожидаемый результат с ожидаемыми вариантами. У меня он почти работает для вас. – Anil

+0

@ При последнем наборе было бы здорово объединить имя сцены с именем параметра -graph_data или вместо этого объединить три команды в одно имя этапа uniq. – user2245731

+0

Как @Anil сказал, первые две записи тривиальны, но кажется, что нет никакой структуры для последней записи, поэтому я уверен, что любой ответ будет опубликован, у вас будет некоторый совместимый, который не работает для вашего фактического ect ect файла. без описания трансформации или структуры, тогда я проголосовал за закрытие. –

ответ

1

Сохраните это в файле с именем awk0.

 
NF == 0        {next} 

substr($1,1,1) == "#" && $2 != "Stage" {next} 

$2 == "Stage" && NF == 3    {stage_name = $2 " " $3 
             next } 

stage_name != ""      {print stage_name, $0 
             stage_name = "" 
             next} 

$2 == "Stage"       {arr[$3] = "" 
             next} 

             { 
             {for (i in arr) { 
              if (match($0, i) != 0) 
              print "Stage", i, $0 
                 }; 
             } 
             } 

Затем запустите с: cat commandlog.txt | awk -f awk0 > ./statistic_files/user_options

Выход:

 
Stage Results mkdir ./QC_graphics_results/ 
Stage Statistics_graph_2 fastqc test.fastq -o ./QC_graphics_results/ 
Stage Dinucleotide_odds prinseq-lite.pl -fastq test.fastq -graph_data test.Dinucleotide_odds.gd -graph_stats dn -out_good null -out_bad null 
Stage Sequence_duplication prinseq-lite.pl -fastq test.fastq -graph_data test.Sequence_duplication.gd -graph_stats da -out_good null -out_bad null 
Stage GC_content prinseq-lite.pl -fastq test.fastq -graph_data test.GC_content.gd -graph_stats 

Успехов!

0

Я согласен, что проблема слабо формализована для тривиального решения с помощью простых инструментов, попробовать что-то подобное в Баш:

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, если он не найдет соответствия, он будет захватывать линию между объявлением «сценическое имя» и следующей начатой ​​диаграммой (предполагается, что параграф начинается с последовательности ##). Должно сработать.

Смежные вопросы