day 30 awk复习

来源:互联网 发布:试发型的软件 编辑:程序博客网 时间:2024/06/06 01:19
awk练习题(http://www.apelearn.com/study_v2/chapter14.html)
  1. 用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)
  2. 查找所有包含 ‘bash’ 的行
  3. 用 ‘:’ 作为分隔符,查找第三段等于0的行
  4. 用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)
  5. 用 ‘:’ 作为分隔符,打印最后一段
  6. 打印行数大于20的所有行
  7. 用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行
  8. 用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式 'root@/bin/bash' )
  9. 用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和
作答:
  1. awk '{print $0}' test.txt
  2. awk '/bash/' test.txt
  3. awk -F':' '$3=="0"' test.txt
  4. awk -F':' '$1=="root" ' test.txt| sed 's/root/toor/'
  5. awk -F':' '{print $NF}' test.txt
  6. awk 'NR>20' test.txt
  7. awk -F':' '$3<$4' test.txt
  8. awk -F':' '{print $1"@"$NF}' test.txt
  9. awk -F':' '{(tot=tot+$4)};END {print tot}' test.txt
1、awk 中使用外部shell变量 http://ask.apelearn.com/question/199
注:“-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