Awk 删除文件中某行上方的重复条目

Awk 删除文件中某行上方的重复条目,awk,sed,grep,Awk,Sed,Grep,我有一个文件,其内容如下 # Time: 180110 10:48:37 use 65_ebccrmproduction; SET timestamp=1515561517; abcdegh # Time: 180110 10:48:59 SET timestamp=1515561554; poiuyt assadd # Time: 180110 10:49:51 SET timestamp=1515561554; assddpoiuyt # Time: 180110 10:49:51 SET

我有一个文件,其内容如下

# Time: 180110 10:48:37
use 65_ebccrmproduction;
SET timestamp=1515561517;
abcdegh
# Time: 180110 10:48:59
SET timestamp=1515561554;
poiuyt
assadd
# Time: 180110 10:49:51
SET timestamp=1515561554;
assddpoiuyt
# Time: 180110 10:49:51
SET timestamp=1515561554;
poiuytassassas
我想grep并删除其内容匹配的块

块表示从#时间到下一个#时间之间的内容

例如,我想匹配poiuyt

然后它将删除下面的行

# Time: 180110 10:48:59
SET timestamp=1515561554;
poiuyt
assadd
# Time: 180110 10:49:51
SET timestamp=1515561554;
poiuytassassas
我有code
sed-n'/pouyt/{s/*/;x;d;};x;p${x;p;}'test.txt | sed'/^$/d'
这将删除模式匹配和该模式上方的一行,但我的目的与此完全不同


注意:这还应删除POUYTASSASAS
Awk
解决方案:

awk '/# Time:/{ 
         if (f && !del){ print lines } 
         lines=$0; del=0; f=1; next 
    }
    f{ 
        lines=lines ORS $0; 
        if (/poiuyt/){ del=1 } 
    }
    END{ if (f && !del) print lines }' file.txt
输出:

# Time: 180110 10:48:37
use 65_ebccrmproduction;
SET timestamp=1515561517;
abcdegh

Awk
解决方案:

awk '/# Time:/{ 
         if (f && !del){ print lines } 
         lines=$0; del=0; f=1; next 
    }
    f{ 
        lines=lines ORS $0; 
        if (/poiuyt/){ del=1 } 
    }
    END{ if (f && !del) print lines }' file.txt
输出:

# Time: 180110 10:48:37
use 65_ebccrmproduction;
SET timestamp=1515561517;
abcdegh
这里,
sed
用于正确划分记录,而
awk
用于进行过滤


这里,
sed
用于正确划分记录,而
awk
用于进行过滤

类似这样的东西
sed的/^#Time:.*/\n&/g'inputfile | awk-vrs='/POUYT/{print$0}'
?是。在回答类似以下内容时使用:.*/\n&/g'inputfile | awk-v RS='/POUYT/{print$0}'?是。作为回答