linux - 删除符合特定条件的行
问题描述
有多个输入文件(例如:file1、file2、file3 ....)每个文件包含如下几行。
文件 1:
123,WoW,45,2018,M_SILVER
124,WoW_HD,2018,M_SILVER
125,WoW,45,2018,M_SILVER_FTTH
126,WoW,45,2018,M_GOLD
文件 2:
133,WoW,45,2019,M_SILVER
134,WoW_HD,2019,M_SILVER
135,WoW,45,2019,M_SILVER_FTTH
136,WoW,45,2019,M_GOLD
我需要删除包含 WoW 和(M_SILVER 或 M_GOLD)输出的行应该只包含如下行。
文件 1:
124,WoW_HD,2018,M_SILVER
125,WoW,45,2018,M_SILVER_FTTH
文件 2:
134,WoW_HD,2019,M_SILVER
135,WoW,45,2019,M_SILVER_FTTH
文件名不能更改。希望现在问题很清楚,你们可以提供解决方案。
尝试如下:
ls | grep file| sort | while read line ; do cat $line | grep WoW |grep -v WoW_HD | grep 'M_SILVER\|M_GOLD' | sed -i '/$line/d' ./infile;done
解决方案
猜猜你想要这样的东西:
$ awk -F, '!($2=="WoW" && ($5~"^M_(SILVER|GOLD) *$"))' file1
124,WoW_HD,2018,M_SILVER
125,WoW,45,2018,M_SILVER_FTTH
$ awk -F, '!($2=="WoW" && ($5~"^M_(SILVER|GOLD) *$"))' file2
134,WoW_HD,2019,M_SILVER
135,WoW,45,2019,M_SILVER_FTTH
如果您有 GNU awk 4.1.0+,您可以添加-i inplace
开关以替换文件。将/
更改为或其他以匹配多个文件。
或者像你以前做的那样,喂到和管道到.file1
file2
file*
ls
xargs
awk
推荐阅读
- python - Pandas 列表的列,检查列表是否相交
- javascript - 更改事件的多边形选项。谷歌地图
- javascript - CSS 3D 动画车轮偏离中心
- generics - 为什么这一生不会“过期”?
- java - 在java中生成特定随机数的概率
- javascript - 如果 importKey() 已经有了,为什么还要在 decrypt() 中定义算法?
- c# - dnlib - 如何更改应用程序 .NetFramework 版本
- android - 使这种布局适应方向变化的最简单方法是什么?
- mysql - 在一对多表之间创建 MySQL 视图
- unity3d - 如何从统一导出到搅拌机?