给出以下数据:
aaa bbb aaa ccc aaa ddd
123 222 aaa aaa bbb ccc
如果第 4 列中的值是“ccc”,我想使用 sed 或 awk 将同一行上第 6 列中的值替换为单词“end”。
任何想法将不胜感激。
答案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