假设我有一个|这样的分隔文本文件:
test.py:
class A:
def __init__(self, var):
self.var = var
def changevar(self, dv):
self.var = self.var + dv
def getvar(self):
return self.var
class B(A):
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
A.__init__(self, var1)
self.inst1 = A(self.var)
A.__init__(self, var2)
self.inst2 = A(self.var)
def operation(self):
dv1 = 2
dv2 = -2
self.inst1.changevar(dv1)
self.inst2.changevar(dv2)
self.var1 = self.inst1.getvar()
self.var2 = self.inst2.getvar()
return self.var1, self.var2, self.var1 * self.var2
def main():
test = B(10, 10)
v1, v2, v3 = test.operation()
print (v1, v2, v3)
return
if __name__ == "__main__":
main()```
>>>python3 test.py
>>>12 8 96
使用123|col 2 row 1|col 3 row 1
xxx|col 2 row 2|col 3 row 2
xxx|col 2 row 3|col 3 row 3
789|col 2 row 4|col 3 row 4
xxx|col 2 row 5|col 3 row 5
xxx|col 2 row 6|col 3 row 6
或sed
来获取此信息:
awk
如果第1列的值为“ xxx”,则应将其替换为上一行中的值。
答案 0 :(得分:2)
$ awk 'BEGIN{FS=OFS="|"} {if ($1=="xxx") $1=p; else p=$1} 1' file
123|col 2 row 1|col 3 row 1
123|col 2 row 2|col 3 row 2
123|col 2 row 3|col 3 row 3
789|col 2 row 4|col 3 row 4
789|col 2 row 5|col 3 row 5
789|col 2 row 6|col 3 row 6
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed -E 'N;s/^(([^|]*).*\n)xxx/\1\2/;P;D' file
将下一行追加到当前行,如果该追加行以xxx
开始,则用当前行的第一个字段替换该字符串。打印/删除当前行并重复。