day 30 awk复习
- 用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)
- 查找所有包含 ‘bash’ 的行
- 用 ‘:’ 作为分隔符,查找第三段等于0的行
- 用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)
- 用 ‘:’ 作为分隔符,打印最后一段
- 打印行数大于20的所有行
- 用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行
- 用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式 '[email protected]/bin/bash' )
- 用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和
作答:
- awk '{print $0}' test.txt
- awk '/bash/' test.txt
- awk -F':' '$3=="0"' test.txt
- awk -F':' '$1=="root" ' test.txt| sed 's/root/toor/'
- awk -F':' '{print $NF}' test.txt
- awk 'NR>20' test.txt
- awk -F':' '$3<$4' test.txt
- awk -F':' '{print $1"@"$NF}' test.txt
- awk -F':' '{(tot=tot+$4)};END {print tot}' test.txt
注:“-v”选项用于定义参数,有多少个变量需要赋值,就需要多少个-v选项
2、awk 合并一个文件 http://ask.apelearn.com/question/493
NR表示读取的行数,FNR表示读取的当前行数。NR==FNR 就表示读取2.txt的时候, 同理NR>FNR表示读取1.txt的时候
3、把一个文件多行连接成一行
http://ask.apelearn.com/question/266
4、awk中gsub函数的使用
http://ask.apelearn.com/question/200
- awk 'gsub(/222222/,"abc")' /tmp/awk/filename --#把filename 文件中所有的“222222”替换为“abc”
- awk -F ':' 'gsub(/222222/,"abc",$1) {print $0}' /tmp/awk/filename --#替换$1中的“222222”为“abc”
- awk 'sub(/222222/,"abc")' /tmp/awk/filename --#把filename 文件中第一次出现的“222222”替换为“abc” 。结果与命令1的结果相同,该命令意思是把文件中每一行中第1次出现的“222222”替换为“abc”,而不是整个文件中第一次出现的222222。更改filename文件内容再验证如图2
5、过滤两个或多个关键词 http://ask.apelearn.com/question/198
- grep -E '3|ss' 1.txt --#找出文件1.txt 中包含"3"或者包含"ss"的行
- egrep '3|ss' 1.txt --#用egrep实现
- awk '/3|ss/' 1.txt --#用awk实现
- awk '/3/||/ss/' 1.txt
6、合并两个文件 http://ask.apelearn.com/question/945
- paste filename1 filename2
如果要在两个文件连接处用一个指定的字符连接,可以用“-d”选项来指定
- paste -d '+' a.txt b.txt