Awk

awk是用来处理文本的。

  • 和sed的区别: sed就像一个女人化妆,只能修饰。 awk是整容术,会对文本进行比较大的改动。

命令的结构

案例一,结构:

  • { } 类似一个循环体,会对文件中的每一行进行迭代。 ```
  • BEGIN{}

  • {}

  • END{} ``` 上面三个语句都有一个花括号,其中放置的是命令(就是要对文本的操作) 而begin、end这些符号,指的是,何时执行命令。 比如,begin指的是,先执行命令,再读取一行文本。 {}指的是,对于读取的文本,执行这个命令。 end 在文本读取完毕之后执行。

案例二,awk的标识符:

echo -e “line1 f2 f3\nline2 f4 f5\nline3 f6 f7” Result: line1 f2 f3 line2 f4 f5 line3 f6 f7

echo -e “line1 f2 f3\nline2 f4 f5\nline3 f6 f7” | awk ‘{ print “Line no:”NR“,No of fields:”NF, “$0=”$0, “$1=”$1,”$2=”$2,”$3=”$3}’ Result: Line no:1,No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 Line no:2,No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 Line no:3,No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

  • NR : 记录数量(1,2,3,4) 比如说,awk 'END{ print NR }' xx.txt 输出xx.txt的行数。
  • NF : 字段数量

  • $1 $2 $3, awk默认以空格作为字段的分隔符。 就是说一段文本,A B C 代表了第一个字段,第二个字段以及第三个字段。 而$0代表了A B C 本身。

awk 'NR<=1 { print $1 }' 1.txt 获取该文件第一行的第一个字段

案例三,以行分割文本:

捕获 4

同理可得:awk '/步骤1/,/步骤2/' *.md 这个命令可以将文档分割,得到步骤一。

案例四,以纵排分割文本:

awk选择特定字符进行分割。如果不选择,默认空格作为分隔符。 awk -F ':' '{print $1}' fileA