2012-05-04 3 views
-3

У меня есть файл, как это:Найти и заменить в определенном столбце

Name Position Letter String 
Bla 123 A ..B.,,,.C.. 
Bla 123 B ..a.,,,.C.. 
Bla 123 C ..b.,,,.A.. 

Я хотел бы заменить . и , с письмом (в первой строке это A)

Конечный продукт :

Name Position Letter String 
Bla 123 A AABAAAAACAA 
Bla 123 B BBaBBBBBCBB 
Bla 123 C CCbCCCCCACC 

AWK мышление заменить символ в колонке 4 с «символ» в колонке 3. Я думаю, AWK Shoul d будет правильным инструментом для этого, но я застрял с заменой символа в строке.

sed s/\(^.\{4\}\)./\\{3\}/ не работает, и я думаю, что sed может быть неправильным инструментом.

Awk/sed/python/perl/vi решения приветствуются.

+1

'AWK«{GSUB (./\ |, /, $ 3, $ 4); print} 'inputfile' –

+0

Вот что я искал! правильное использование команды gsub. – AWE

ответ

8
perl -pale '$F[3]=~s/[.,]/$F[2]/g;$_=join" ",@F' file 

See it

+1

+1, интересно, если это считается «болезненно ожирением» для скрипта perl ... – Gleno

+0

Ожирение и уродство, но сделали работу. Благодарю. – AWE

+1

'awk 'a = $ 3 {gsub (/ \. | \, /, A); print} 'file' – Tedee12345

3

решение без использования regular expressions:

with open('in.txt') as f: 
     for x in f: 
      x=x.rstrip().split() 
      x[-1]=x[-1].replace('.',x[-2]) 
      x[-1]=x[-1].replace(',',x[-2]) 
      print(" ".join(x)) 

    Name Position Letter String 
    Bla 123 A AABAAAAACAA 
    Bla 123 B BBaBBBBBCBB 
    Bla 123 C CCbCCCCCACC 
+1

Python, если кто-то его не узнает. –

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