复制第一行第一行中与模式匹配的行的值

时间:2019-05-29 16:56:46

标签: awk sed

假设我有一个|这样的分隔文本文件:

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”,则应将其替换为上一行中的值。

2 个答案:

答案 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开始,则用当前行的第一个字段替换该字符串。打印/删除当前行并重复。