行の内容に基づいてファイル内の特定の行を置き換える方法[閉じる]

行の内容に基づいてファイル内の特定の行を置き換える方法[閉じる]

次のファイルがあります(例:

first line sss case-2-hello-world other words
second line other words
third line sss case-1-love-you other words
fourth line other words
fifth line other words
sixth line sss case-6-not-work other words

私はそれを次のように変換したいと思います:

pp:12 pme:4 plan:cpu_bind=hello mem_bind=world 
second line other words 
pp:6 pme:2 plan:cpu_bind=love mem_bind=you
fourth line other words 
fifth line other words 
pp:36 pme:12 plan:cpu_bind=not mem_bind=work 

まず、パターンのある線を識別しますsss。第二に、数字を抽出します。第三に、ppとpmeを計算しますpp=number*6 and pme=number*2。第四に、数字を含む行の単語を分割してcpu_bindsumsに割り当てますmem_bind。第五に、一緒に集めてラインを交換します。

たとえば、私は行を識別します

first line sss case-2-hello-world other words

sss数字は2です。その後は計算をする必要がありますpp=2*6 pme=2*2。文字列をcase-2-hello-world複数の部分に分割し、合計helloに割り当てますcpu_bind。最後に、私は得なければならないworldmem_bind

 pp:12 pme:4 plan:cpu_bind=hello mem_bind=world

元の行を交換してください。

注:sss行のどこにでも表示できますが、一度だけ表示されます。sss置き換える必要がある行を識別するために使用できる唯一のパターン。行には、数字と異なる数字を含む別の単語があります。パターンはcase-number-cpu_bind-mem_bind4つの部分で構成されています。その順序は決まっていて吐き出すことができる-

ベストアンサー1

Python(2.x)では:

import sys

pat = 'sss'

for line in open(sys.argv[1]):
    if not pat in line:
        print line,
        continue
    case_nr = line.split(pat + ' case-', 1)[1].split('-')[0]
    print '**something about case{}**'.format(case_nr)

呼ぶpython script_name.py input.txt > output.txt

おすすめ記事