案例:查找文件中不是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 #