awk匹配单个匹配函数中的多个模式

时间:2015-08-19 21:23:09

标签: regex shell unix awk

我的csv文件如下所示:

In [33]: pd.melt(df.reset_index(),
                 id_vars=['values'],
                 value_vars=['interval1','interval2','interval3'])
Out[33]: 
  values   variable value
0    aaa  interval1   ##1
1    bbb  interval1   ##4
2    ccc  interval1   ##7
3    aaa  interval2   ##2
4    bbb  interval2   ##5
5    ccc  interval2   ##8
6    aaa  interval3   ##3
7    bbb  interval3   ##6
8    ccc  interval3   ##9

我想删除所有包含file1 title1,title2 car,21 train,2015/10/02 bus,hello title2 = 21

的行

这就是我现在正在做的事情:

title2 = 2015/10/02

最终输出

 cat file1|awk -F, '{if(match($2,"21")==0)print}'>a1
 cat a1|awk -F, '{if(match($2,"2015/10/02")==0)print}'>a2

有没有更有效的方法在1行中这样做,所以我不会生成这么多不必要的输出文件?

3 个答案:

答案 0 :(得分:3)

是的,你可以使用:

awk -F, '$2 != 21 && $2 != "2015/10/02"' aa
title1,title2
bus,hello

如果字段已经用逗号分解,则无需致电match

答案 1 :(得分:2)

awk -F, '$2!~/^(21|2015\/11\/03)$/' file

摆脱所有2015 *日期:

awk -F, '$2!~/^(21|2015\/..\/..)$/' file

答案 2 :(得分:0)

也许这就足够了?
awk'!/ 21 | 2015 /'file
title1,title2
总线,你好