Linux 中 awk指令 sub和substr的区别

 

001、sub的用法

[root@localhost test]# ls
a.txt
[root@localhost test]# cat a.txt             ## 测试数据
01      02aa    03aa    04
05      06aa    07kk    08
09      10kk    11aa    12
13      14jj    15tt    16
17      18mm    19ee    20
[root@localhost test]# awk '{OFS = "\t"; sub("a", "Q"); print $0}' a.txt       ## 将每行的第一个a替换为Q
01      02Qa    03aa    04
05      06Qa    07kk    08
09      10kk    11Qa    12
13      14jj    15tt    16
17      18mm    19ee    20
[root@localhost test]# awk '{OFS = "\t"; sub("a", "Q", $1); print $0}' a.txt        ## 限定第一列
01      02aa    03aa    04
05      06aa    07kk    08
09      10kk    11aa    12
13      14jj    15tt    16
17      18mm    19ee    20
[root@localhost test]# awk '{OFS = "\t"; sub("a", "Q", $2); print $0}' a.txt        ## 限定第二列
01      02Qa    03aa    04
05      06Qa    07kk    08
09      10kk    11aa    12
13      14jj    15tt    16
17      18mm    19ee    20

 

 

002、

[root@localhost test]# ls
a.txt
[root@localhost test]# cat a.txt                    ## 测试数据
01      02aa    03aa    04
05      06aa    07kk    08
09      10kk    11aa    12
13      14jj    15tt    16
17      18mm    19ee    20
[root@localhost test]# awk '{a=sub("a", "Q"); print a}' a.txt           ## 表达式的值是替换发生的次数
1
1
1
0
0
[root@localhost test]# awk '{a=gsub("a", "Q"); print a}' a.txt           ## 表达式的值是替换发生的次数
4
2
2
0
0

 。

 

2、Linux awk语句中substr的用法

[root@localhost test]# cat a.txt                                        ## 测试数据
01      02aa    03aa    04
05      06aa    07kk    08
09      10kk    11aa    12
13      14jj    15tt    16
17      18mm    19ee    20
[root@localhost test]# awk '{a=substr($2, 1, 2); print a}' a.txt       ## 提取第二个字段的 从第一个字符开始数,向后数两个字符
02
06
10
14
18
[root@localhost test]# awk '{a=substr($2, 2); print a}' a.txt          ## 提取第二个字段的, 从第二个字符开始,一直到最后一个字符
2aa
6aa
0kk
4jj
8mm
[root@localhost test]# awk '{a=substr($2,2,2); print a}' a.txt         ## 提取第二个字符的, 从第二个字符开始,向后数两个字符
2a
6a
0k
4j
8m
[root@localhost test]# awk '{a=substr($2, length($2) - 1); print a}' a.txt       ## 提取第二个字段的, 从倒数第二个字符,一直到第二个字段的结尾
aa
aa
kk
jj
mm

 。

 

posted @ 2024-10-23 15:06  小鲨鱼2018  阅读(7)  评论(0编辑  收藏  举报