awk
awk是用来处理文本的。
- 和sed的区别:
sed就像一个女人化妆,只能修饰。
awk是整容术,会对文本进行比较大的改动。
命令的结构
案例一,结构:
- { } 类似一个循环体,会对文件中的每一行进行迭代。上面三个语句都有一个花括号,其中放置的是命令(就是要对文本的操作)
1
2
3
4
5- 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
获取该文件第一行的第一个字段
案例三,以行分割文本:
同理可得:awk '/步骤1/,/步骤2/' *.md
这个命令可以将文档分割,得到步骤一。
案例四,以纵排分割文本:
awk选择特定字符进行分割。如果不选择,默认空格作为分隔符。awk -F ':' '{print $1}' fileA