【问题标题】:Find and replace in a specific column [closed]在特定列中查找和替换[关闭]
【发布时间】:2012-05-13 22:25:23
【问题描述】:

我有一个这样的文件:

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

我想用 Letter 替换 .,(第一行是 A

最终产品:

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

awk 的想法是将第 4 列中的字符替换为第 3 列中的“the”字符。 我认为 awk 应该是解决此问题的正确工具,但我坚持替换字符串中的字符。

sed s/\(^.\{4\}\)./\\{3\}/ 不起作用,我认为 sed 可能是错误的工具。

欢迎使用 Awk/sed/python/perl/vi 解决方案。

【问题讨论】:

  • awk '{gsub(/\.|,/, $3, $4); print}' inputfile
  • 这就是我想要的!正确使用 gsub 命令。

标签: python perl sed awk vi


【解决方案1】:
perl -pale '$F[3]=~s/[.,]/$F[2]/g;$_=join" ",@F' file

See it

【讨论】:

  • +1,我想知道这对于 perl 脚本是否算作“病态肥胖”...
  • 又胖又丑,但成功了。谢谢。
  • awk 'a=$3{gsub(/\.|\,/, a); print }' file
  • 太好了,丹尼斯威廉姆森通过仅替换第 4 列中的字符来改进这一点,这将替换 .和 , 在所有列中。
【解决方案2】:

不使用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

【讨论】:

  • Python,以防有人认不出来。
猜你喜欢
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2019-08-07
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多