案例:查找文件中不是Cancel/Stop/Cancel BOX这几个关键字的列
要求:不区分大小写,忽略前后中间空格
文件格式:luosea # head aaaaaa201701-03.csv
8148827550,20170201000216,CANCEL BOX,,
8034541493,20170201000242,CANCLE,,
9034652099,20170201004106,ST0P,,
9069089216,20170201000126,cancle,,
7069659380,20170201005216,STOP,,
9037220900,20170201005230,STOP,,
8032453482,20170201005316,STOP,,
处理方法:
1、使用sed 转化文件,sed -i 's/,/|/1' aaaaaa201701-03.csv
sed -i 's/,/|/2' aaaaaa201701-03.csv
sed -i 's/,//g' aaaaaa201701-03.csv
转换后的文件格式:luosea # head aaaaaa201701-03.csv
8148827550|20170201000216|CANCEL BOX
8034541493|20170201000242|CANCLE
9034652099|20170201004106|ST0P
9069089216|20170201000126|cancle
7069659380|20170201005216|STOP
9037220900|20170201005230|STOP
8032453482|20170201005316|STOP
8164895345|20170201005318|STOP
8105197779|20170201000015|Stop
8064349047|20170201001958|Stop stealin
习惯问题,将该文件重命名mv aaaaaa201701-03.csv luosea.txt
为避免格式不一致,将文件由dos格式转化为linux格式luosea # dos2unix luosea.txt
然后使用AWK 处理就行了awk -F "|" '$3 !~/^[[:blank:]]*[sS][tT][oO][pP][[:blank:]]*$/ && $3 !~/^[[:blank:]]*[cC][aA][nN][cC][eE][lL][[:blank:]]*$/ && $3 !~/^[[:blank:]]*[cC][aA][nN][cC][eE][lL][[:blank:]]*[bB][oO][xX][[:blank:]]*$/ {print $0}' luosea.txt > result.txt
解释下:
1、awk -F "|" 就是以"|" 作为分隔符
2、'$3 !~/^[[:blank:]]*[sS][tT][oO][pP][[:blank:]]*$/ !~表示不匹配,
3、^[[:blank:]]*开头存在或者不存在空格匹配,
4、[sS][tT][oO][pP]表示不区分大小写匹配stop,
5、[[:blank:]]*$表示忽略结尾的空格 ,再加上前面的不匹配,就是不区分大小写忽略空格不匹配stop 。
6、^ 表里开始字符 $ 结束字符 。 其他类似 。
最后得出结果就是去除关键字的了luosea # head result.txt
8034541493|20170201000242|CANCLE
9034652099|20170201004106|ST0P
9069089216|20170201000126|cancle
8064349047|20170201001958|Stop stealing
8106812512|20170201062023|Call me now.STOP
9069570059|20170201062541| Cancle Box
7063027423|20170201062956|STOP calle feel
8144895412|20170201064339|Cancil
7032251500|20170201065432|text CANCEL BOX
8106812512|20170201064517|Call me now.STOP
luosea #