awk, sed, grep学习笔记

grep -v '^$' xx.txt  排除空行  

egrep 或者 grep -E 是一个意思,都表示拓展正则

egrep -o '[abc]+' xx.txt  其中-o表示只打印匹配到的内容

egrep -w 'abc' xx.txt  单词模式,只匹配拥有完整单词的行

egrep -n 'abc' xx.txt  匹配含有abc的行,-n显示行号

egrep -c 'abc' xx.txt  匹配含有abc的行,-c显示匹配到的有几行

其他,可以参考:Linux grep/egrep命令详解_grep -e_镜花水月-李的博客-CSDN博客

[^abc] 正则里一旦中括号出先^则代表排除的意思,所以这里的正则就是说排除abc以外的字符

sed -n "3p" xx.txt 打印xx.txt文件里的第三行,-n的意思是,不将模式空间里的数据流打印到terminal, 
sed -nr '/[0-9]+/p' 注意 sed默认不支持正则的拓展模式, 所以在使用 + 这种正则符号的时候,需要加 -r

sed -nr "3d" xx.txt 这里p是打印,那么d就是删除了,跟p的用法完全相同

sed -nr '/^$|#/!p' xxx.txt  遇到空行或带#的行,不打印。!代表取反,不的意思。  

sed -r 's#(.*)#<\1>#g' xxx.txt 将每一行的内容左右加上<>.其中的()就是正则里组的意思,叫先保护再使用

sed -inr '/.*abc.*/s#.*#aa#' test2  一定记住,加了-i参数,就是真的把源文件改了,否则就只是预览模式,随便搞


awk -F, 'BEGIN{print "hahaha"}{print $2}END{print "结束啦"}' xx.txt  这是awk的标准模式,读取文件之前干啥,读取文件干啥,读完文件干啥,
                                                                     -F指定分割列时用的分割符

awk 'NR>=1 && NR<=5' xx.txt  打印1-5行,NR是number of record 行号的意思

column -t  将列显示的好看点,对齐

awk '{print $1,$NF}' xxx.txt  打印第一列和最后一列。NF是number of field 总列数的意思

awk -F: -v OFS '{print $1,$2}' xxx.txt  将:作为列的分割符,并最后输出  -F== -v FS , -v OFS  F: Field  S: separator O: output

awk -F: '$3~/^1/' xx.txt  文件中第三列中包含以1为开头的东西。 ~ 代表包含,!~代表不包含

awk '/11:02:00/,/11.05.00/{print $1}' xx.txt 显示11:02:00到11.05.00这个时间段的数据的第一列

seq 100 | awk 'BEGIN{i=0}{i+=1}END{print i}'  awk的计数模式,如果i的初始值默认就是0,所以,如果定义的值为0,也可不定义

seq 100 | awk 'BEGIN{i=20}{i+=1}END{print i}'  定义初始值为i=20

seq 100 | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'  求和模式,同样sum的默认值为0,所以这里也可不定义begin

seq 100 | awk 'BEGIN{sum=0}{sum+=$1;print sum}END{print sum}' 多了个print可以打印加和的过程,这里一定注意,中间的花括号里,一定用的是 :而不是','

seq 100 | awk 'BEGIN{sum=0;a=1}{sum+=$1;print sum}END{print sum, a}' 注意语句,一个语句内是','分隔,多个语句是';'分隔

awk 'BEGIN{a[0]=1;a[1]="ymk"; for (i in a) print i, a[i]}'   这里的for语句是awk专用的,for里取的是数组下标

awk -F"[/]" '{a[$3]++}END{for (i in a) print i,a[i]}' test2   这里 a[]++ 就是用来搞统计的,[]里填要统计的列

awk -F"[/]" '{a[$3]++}END{for (i in a) print i,a[i]}' test2 | sort -rnk2 顺便排序,-r是逆序,n是数字,k代表列,2就是第二列

echo you are aaaaacd  a good baby bbbbbb. | awk -F"[ \.]" '{for (i=1;i<=NF;i++) if (length($i)<4) print $i}' 

你可能感兴趣的:(数学建模)