如果给定值在 A 列中,则替换 B 列中的值

如果给定值在 A 列中,则替换 B 列中的值

给出以下数据:

aaa bbb aaa ccc aaa ddd
123 222 aaa aaa bbb ccc

如果第 4 列中的值是“ccc”,我想使用 sed 或 awk 将同一行上第 6 列中的值替换为单词“end”。

任何想法将不胜感激。

答案1

awk

awk '$4=="ccc"{ $6="end" }1' file

最后1的 只打印当前行,并且是{ print }(参见awk脚本末尾的1是什么意思)。

答案2

我不建议使用 sed 对表格数据执行操作,但鉴于问题的标签,我无论如何都会提供 GNU sed 解决方案。

sed -r 's:^(([^ ]* ){3}ccc [^ ]* )[^ ]*(.*)$:\1end\3:' file

我假设可能有超过 6 列。如果不是,则(.*)不需要组 \3。

正如您所看到的,代码在编写/修改时不那么可读且容易出错,因此 awk 解决方案是更好的选择。

答案3

#!/usr/bin/python
k=open('filename','r')
for i in k:
    o=i.strip().split(' ')
    if ( o[3] == "ccc" ):
        o[5]="end"
    print " ".join(o)

输出

aaa bbb aaa ccc aaa end
123 222 aaa aaa bbb ccc

相关内容