awk复习
2017-11-24 22:01
169 查看
复习
扩展
awk 中使用外部shell变量http://ask.apelearn.com/question/199
awk 合并一个文件 http://ask.apelearn.com/question/493
把一个文件多行连接成一行 http://ask.apelearn.com/question/266
awk中gsub函数的使用 http://ask.apelearn.com/question/200
awk 截取指定多个域为一行 http://ask.apelearn.com/question/224
过滤两个或多个关键词 http://ask.apelearn.com/question/198
用awk生成以下结构文件 http://ask.apelearn.com/question/5494
awk用print打印单引号 http://ask.apelearn.com/question/1738
合并两个文件 http://ask.apelearn.com/question/945
awk的参考教程 http://www.cnblogs.com/emanlee/p/3327576.html
一、文本间隔
1、在每一行后面增加一空行
二、文本的替换
1、在每一行查找到good,然后把good替换为bad
sed ‘s/good/bad/’只把每行的第一个good替换为bad
sed ‘s/good/bad/2’只把每行的第二个good替换为bad
sed ‘s/good/bad/g’把每一行的所有good替换为bad
sed ‘s/.∗good/\1bad/’只把每一行的的最后一个good替换位bad
sed ‘s/.∗good.∗good/\1bad\2/’只把每一行的的倒数第二个good替换位bad
awk ‘{sub(/good/,”bad”); print 0}’只把每行的第一个good替换为bad
awk ‘{gsub(/good/,”bad”); print0}’把每一行的所有good替换为bad
cat test |tr ‘root’ ‘good’
cat test |tr ‘root’ ‘god’——注意区别
sed ‘s/root/good/p’ test
awk ‘{gsub(/root/,”good”);print 0}’ test
awk ‘{gsub(/root/,”god”);print0}’ test
通过对比可知tr的替换两个字串必须等长度,而sed不能把说有的root替换
sed ‘/fell/ s/good/bad/g’
awk ‘{if(/fell/) gsub(/good/,”bad”); print $0 }’
3、只在不出现字符串fell字符串的前提下,将找到的行中的good替换为bad
sed ‘/fell/ !s/good/bad/g’
awk ‘{if(!/fell/) gsub(/good/,”bad”); print $0 }’
4、多单词替换,替换为一个单词
sed ‘s/good/bad/g;s/fell/bad/g;s/sun/bad/g’
sed ‘s/good|fell|sun/bad/g’
awk ‘{gsub(/good|fell|sun/,”bad”) ; print $0}’
5、倒置所有行,第一行变为最后一行(模拟tac)
sed ‘1!G;h;!d′sed−n‘1!G;h;p’
awk ‘{A[i++]=$0} END{for (j=i-1;j>=0;j–) print A[j]}’
6、将每两行连接为一行
sed ‘!N;s/\n/ /’
awk ‘{f=!f;if(!f) printf(“%s”,0);else printf("%s\n",$0)}’
7、在文件中每隔5行显示一空行
sed ‘0~5G’
sed ‘n;n;n;n;G’
awk ‘{print $0 ;i++;if(i==5) {printf( “\n”) ;i=0}}’
三、选择性的显示特定行
1、显示文件的前10行
sed 10q
awk ‘{print ;if(NR==10) exit }’
2、显示文件的第一行
sed q
awk ‘{ print;exit}’
3、显示文件的倒数第二行
sed -e ‘!h;d;′−ex当文件只有一行时,输出空行sed−e‘1$q;′−e′!{h;d;}’ -e x当文件只有一行时,显示该行
sed -e ‘1{d;}' -e '!{h;d;}’ -e x当文件只有一行时,不输出
awk ‘{ B=A;A=$0} END{ print B}’当文件只有一行时,输出空行
4、只显示匹配正则表达式的行
sed -n ‘/good/p’
sed ‘/good/!d’
awk ‘/good/ {print $0}’
awk ‘/good/’
grep ‘good’
5、只显示不匹配正则表达式的行
sed -n ‘/good/!p’
sed ‘/good/d’
awk ‘!/good/ {print $0}’
grep -v ‘good’
6、显示匹配行的上一行,而不显示匹配行
sed -n ‘/good/{g;1!p;};h’
awk ‘/good/ {print A} {A=$1}
7、显示匹配行的下一行,而不显示匹配行
sed -n ‘/good/{n;p;}’
awk ‘{if(A) print;A=0}/23/{A=1}’
8、显示文本的制定行
sed -n ‘3,5p’
sed ‘3,5!d’
awk ‘{if(NR>=3 &&NR<=5) print } ‘
目录: 1、不显示文件中的空行 2、删除文件的1到5行3、删除文件注释行4、打印匹配行5、显示从字符1到字符2的中间行6、匹配特别表达式7、替代文本
1、不显示文件中的空行
[guo@guo~]grep -v '^’ rc.local
[guo@guo~]sed -e '/^/d’ rc.local
[guo@guo~]awk '!/^/{print $0 }’ rc.local
2、删除文件的1到5行
[guo@guo~]cattest[guo@guo ] sed -e ‘1,5d’ test
[guo@guo~]awk '{if(NR>5 ) print0} ’ test
3、删除文件注释行
[guo@guo~]sed -e “/^#/d” rc.local
[guo@guo~] awk '!/^#/{print 0}’ rc.local
[guo@guo~] grep -v ‘^#’ rc.local
5、显示从字符1到字符2的中间行
[guo@guo~]sed−n−e‘/hello/,/sorry/p′test1[guo@guo ] awk '/hello/,/sorry/ {print $0 }’ test1
6、匹配特别表达式
[guo@guo~]sed -n -e ‘/main[[:space:]]*(/,/^}/p’ for.c
1、通过awk访问系统环[guo@guoawk] awk ‘BEGIN { print ENVIRON[“HOME”]; printENVIRON[“PATH”]}’
/home/guo
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbinwk中的算术运算符
awk支持的运算符有+ - * / % ^。
4、awk的循环
if语句
扩展
awk 中使用外部shell变量http://ask.apelearn.com/question/199
awk 合并一个文件 http://ask.apelearn.com/question/493
把一个文件多行连接成一行 http://ask.apelearn.com/question/266
awk中gsub函数的使用 http://ask.apelearn.com/question/200
awk 截取指定多个域为一行 http://ask.apelearn.com/question/224
过滤两个或多个关键词 http://ask.apelearn.com/question/198
用awk生成以下结构文件 http://ask.apelearn.com/question/5494
awk用print打印单引号 http://ask.apelearn.com/question/1738
合并两个文件 http://ask.apelearn.com/question/945
awk的参考教程 http://www.cnblogs.com/emanlee/p/3327576.html
一、文本间隔
1、在每一行后面增加一空行
sed G guo.sh awk '{printf("%s\n\n",$0 ) }'
2、将文件中原来的空行删掉,并在在每一行后边增加一空行
sed '/^$/d;G ' awk '!/^$/ {printf("%s\n\n",$0 ) }'
3、在匹配式样的行前插入一空行
sed '/good/i\\' sed '/hello/{x;p;x;}' awk '{ if(/hello/) printf("\n\%s\n",$0);else print $0}'
4、在匹配式样的行后插入一空行
sed '/good/a\\' sed '/hello/G' awk '{if(/hello/) printf("%s\n\n",$0) ;else print $0}'
5、在匹配式样的行前、行后各插入一空行
sed '/hello/{x;p;x;G;}' awk '{ if(/hello/) printf("\n\%s\n\n",$0);else print $0}'
二、文本的替换
1、在每一行查找到good,然后把good替换为bad
sed ‘s/good/bad/’只把每行的第一个good替换为bad
sed ‘s/good/bad/2’只把每行的第二个good替换为bad
sed ‘s/good/bad/g’把每一行的所有good替换为bad
sed ‘s/.∗good/\1bad/’只把每一行的的最后一个good替换位bad
sed ‘s/.∗good.∗good/\1bad\2/’只把每一行的的倒数第二个good替换位bad
awk ‘{sub(/good/,”bad”); print 0}’只把每行的第一个good替换为bad
awk ‘{gsub(/good/,”bad”); print0}’把每一行的所有good替换为bad
cat test |tr ‘root’ ‘good’
cat test |tr ‘root’ ‘god’——注意区别
sed ‘s/root/good/p’ test
awk ‘{gsub(/root/,”good”);print 0}’ test
awk ‘{gsub(/root/,”god”);print0}’ test
通过对比可知tr的替换两个字串必须等长度,而sed不能把说有的root替换
2、只在出现字符串fell字符串的前提下,将找到的行中的good替换为bad
sed ‘/fell/ s/good/bad/g’
awk ‘{if(/fell/) gsub(/good/,”bad”); print $0 }’
3、只在不出现字符串fell字符串的前提下,将找到的行中的good替换为bad
sed ‘/fell/ !s/good/bad/g’
awk ‘{if(!/fell/) gsub(/good/,”bad”); print $0 }’
4、多单词替换,替换为一个单词
sed ‘s/good/bad/g;s/fell/bad/g;s/sun/bad/g’
sed ‘s/good|fell|sun/bad/g’
awk ‘{gsub(/good|fell|sun/,”bad”) ; print $0}’
5、倒置所有行,第一行变为最后一行(模拟tac)
sed ‘1!G;h;!d′sed−n‘1!G;h;p’
awk ‘{A[i++]=$0} END{for (j=i-1;j>=0;j–) print A[j]}’
6、将每两行连接为一行
sed ‘!N;s/\n/ /’
awk ‘{f=!f;if(!f) printf(“%s”,0);else printf("%s\n",$0)}’
7、在文件中每隔5行显示一空行
sed ‘0~5G’
sed ‘n;n;n;n;G’
awk ‘{print $0 ;i++;if(i==5) {printf( “\n”) ;i=0}}’
三、选择性的显示特定行
1、显示文件的前10行
sed 10q
awk ‘{print ;if(NR==10) exit }’
2、显示文件的第一行
sed q
awk ‘{ print;exit}’
3、显示文件的倒数第二行
sed -e ‘!h;d;′−ex当文件只有一行时,输出空行sed−e‘1$q;′−e′!{h;d;}’ -e x当文件只有一行时,显示该行
sed -e ‘1{d;}' -e '!{h;d;}’ -e x当文件只有一行时,不输出
awk ‘{ B=A;A=$0} END{ print B}’当文件只有一行时,输出空行
4、只显示匹配正则表达式的行
sed -n ‘/good/p’
sed ‘/good/!d’
awk ‘/good/ {print $0}’
awk ‘/good/’
grep ‘good’
5、只显示不匹配正则表达式的行
sed -n ‘/good/!p’
sed ‘/good/d’
awk ‘!/good/ {print $0}’
grep -v ‘good’
6、显示匹配行的上一行,而不显示匹配行
sed -n ‘/good/{g;1!p;};h’
awk ‘/good/ {print A} {A=$1}
7、显示匹配行的下一行,而不显示匹配行
sed -n ‘/good/{n;p;}’
awk ‘{if(A) print;A=0}/23/{A=1}’
8、显示文本的制定行
sed -n ‘3,5p’
sed ‘3,5!d’
awk ‘{if(NR>=3 &&NR<=5) print } ‘
目录: 1、不显示文件中的空行 2、删除文件的1到5行3、删除文件注释行4、打印匹配行5、显示从字符1到字符2的中间行6、匹配特别表达式7、替代文本
1、不显示文件中的空行
[guo@guo~]grep -v '^’ rc.local
[guo@guo~]sed -e '/^/d’ rc.local
[guo@guo~]awk '!/^/{print $0 }’ rc.local
2、删除文件的1到5行
[guo@guo~]cattest[guo@guo ] sed -e ‘1,5d’ test
[guo@guo~]awk '{if(NR>5 ) print0} ’ test
3、删除文件注释行
[guo@guo~]sed -e “/^#/d” rc.local
[guo@guo~] awk '!/^#/{print 0}’ rc.local
[guo@guo~] grep -v ‘^#’ rc.local
5、显示从字符1到字符2的中间行
[guo@guo~]sed−n−e‘/hello/,/sorry/p′test1[guo@guo ] awk '/hello/,/sorry/ {print $0 }’ test1
6、匹配特别表达式
[guo@guo~]sed -n -e ‘/main[[:space:]]*(/,/^}/p’ for.c
1、通过awk访问系统环[guo@guoawk] awk ‘BEGIN { print ENVIRON[“HOME”]; printENVIRON[“PATH”]}’
/home/guo
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbinwk中的算术运算符
[guo@guoawk]$ awk 'BEGIN {print "3+2=" 3+2 }' 3+2=5 [guo@guoawk]$ awk 'BEGIN {print "2^10=" 2^10 }' 2^10=1024 [guo@guoawk]$ awk 'BEGIN {print "(3+1)*4/2=" (3+1)*4/2}' (3+1)*4/2=8
awk支持的运算符有+ - * / % ^。
4、awk的循环
if语句
[guo@guoawk]$ cat num 12243535 890232 232 9809 890 -8990 [guo@guoawk]$ awk '{if($1>$2) print $0}' num 890232 890 -8990 [guo@guoawk]$ awk '{if($1>$2) {print $0 ; print $1 "is larger than"$2}}' num 890232 890islarger than232 890 -8990 890islarger than-8990 if/else [guo@guoawk]$ awk '{if($1>$2) print $1 ;else print $2}' num 3535 890 9809 890 [guo@guoawk]$ awk '{if($1>$2) {count++ ;print count} else print $2}' num 3535 1 9809 2
相关文章推荐
- shell与awk学习复习例子(循环与字符串截取判断)
- 复习linux命令-[awk,comm,cut]
- awk 部分 cut部分 &&网络部分复习
- day 30 awk复习
- Linux学习笔记_基本命令复习(seq sed awk)
- 9.7 awk复习、拓展
- 20151205正则第七部分(awk复习)
- 使用awk进行logcat过滤
- MFC第1天--跟踪代码要抓重点--切记切记--侯杰复习C++ 2对象切割与虚函数P68
- sed,awk工具学习
- Struts2回顾复习(转)
- 安卓实训第九天---Activity的复习以及在Onstart里设置网络连接
- awk的使用
- 第15天 简单小复习
- STL常用函数复习之————multimap
- 【算法复习二】货郎担(旅行售货商)动态规划
- KMP 复习 再续~~
- 格式处理器--AWK
- awk工具