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
我有codesed-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}'?是。作为回答