2014-11-09 3 views
0

Я использую сценарий питона, который принимает в несколько аргументов:передача питон аргумент AWK сценария

pipeline.py -t reg.bed -n WT -s run -ID 567 

Внутри сценария питона, я использую AWK сценария, который должен принимать в аргументы, переданные выше:

например, он должен принять аргумент по имени, ID = 567 и распечатать его в файле:

awk '{print "567", $0}' input.txt > output.txt 

может кто-нибудь помочь мне, как я могу передать строку «567» в команду AWK.

Заранее спасибо.

+0

вы можете сделать работу с помощью питона, то зачем идти на AWK ?? – Hackaholic

ответ

1

-v вариант использования AWK в

awk -v id=567 '{print id, $0}' input.txt > output.txt 

Хотя этот сценарий AWK так просто, конечно, вы должны реализовать его в питона.

+0

спасибо! Но я бы не указал значение id в awk-скрипте. Значение передается как аргумент скрипту python, который должен анализироваться через awk. – chas

+0

Затем вам нужно узнать, как python обрабатывает аргументы командной строки. –

-2

Особое внимание следует обратить на формат cmd внутри os.system (указать оболочку cmd в скрипте python).

Я приведу пример, чтобы проиллюстрировать


У меня есть файл с именем bNormal1.bedgraph.
Я хочу, чтобы извлечь строки, которые удовлетворяют мое состояние:

(NR==1 && $1== "track")||($1=="chr1" && $2>220138080 && $3 < 220138189) 

И я хочу использовать переменные заменить некоторые аргументы:

chrom="chr1" $2=220138080 $3= 220138189 

Это правильный питона CMD:

import os 

chrom="chr1" 

start=220138080 

end=220138189 

bedgraphfile="bNormal1.bedgraph" 

os.system('awk \'(NR==1 && $1== "track")||($1=="%s" && $2> %d && $3 < %d) {{print $0}} \' %s'%(chrom,start,end,bedgraphfile))** 

cmd output:

track type=bedGraph name=bNormal1 visibility=full color=54,54,54 

chr1 220138087 220138187 0.226285 

0 

Полное содержимое файла запроса bNormal1.bedgraph:

track type=bedGraph name=bNormal1 visibility=full color=54,54,54 


chr1 220138087 220138187 0.226285 


chr1 220138229 220138314 0.226285 
Смежные вопросы