LINUX删除指定字段不匹配的行脚本怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX删除指定字段不匹配的行脚本怎么写相关的知识,希望对你有一定的参考价值。

操作系统:SUSE11

需求:有一文本文件,里面数据以|分隔,现在需求如果第8个字段不是时间格式(例:2014-11-27 10:11:27),则删除此行。直接修改文件。
我考虑用awk加sed写,但是写不出来,求高手帮忙!
请大家注意,我想要的是直接修改原文件,而不是把剔除结果重定向。请问有没有办法呢?

参考技术A

用 sed 实现比较麻烦,可以用 awk:

 awk -F"|" 'if($8 ~ /[0-9]4-[0-9]2-[0-9]2\\ [0-9]2:[0-9]2:[0-9]2/) print' Input > Output

Input 是需要处理的文件, Output 是输出文件。awk 不提供直接修改文件的功能。[0-9]4 是正则表达式表示4个数字,其它类似。

追问

能直接修改文件吗?因为文件太大,重新输出一个比较浪费磁盘空间。

追答

如果怕占用空间,为什么不能输出结果后把原文件删了?直接修改很大的文件很费时间,不如直接输出。用 perl 貌似可以实现,比较麻烦,awk 和 sed 实现更麻烦

参考技术B awk -F"|" 'if($8~/.*-*-.*:.*:/) print' 1.txt 参考技术C 这事awk足够了。perl大材小用。 参考技术D sed -i -r '/^([^|]*\|)7[0-9]4-[0-9]2-[0-9]2 [0-9]2:[0-9]2:[0-9]2/!d' filename本回答被提问者采纳 第5个回答  2014-11-27 用perl写给你可以吗

以上是关于LINUX删除指定字段不匹配的行脚本怎么写的主要内容,如果未能解决你的问题,请参考以下文章

linux怎么写复制脚本?

linux基础命令

linux脚本运行后把脚本删了会怎么办

sed删除怎么生效

怎样用SQL脚本为指定的一批表增加字段?

linux写脚本,需要ls只显示前10个文件,怎么实现?