Linux awk中match + substr提取列中列数据

 

001、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt           ## 测试数据
AFI:103 U AFI
AFI:11 U AFI
MEA:10A U MEA
[root@PC1 test]# awk '{match($1,/:.*/); print substr($1, RSTART+1)}' a.txt  ## 提取第一列以:号分割的后边的内容
103
11
10A
[root@PC1 test]# cat a.txt
AFI:103 U AFI
AFI:11 U AFI
MEA:10A U MEA
[root@PC1 test]# awk '{match($1, /.*:/); print substr($1,RSTAR, RLENGTH-1)}' a.txt   ## 分号:之前的内容
AFI
AFI
MEA

image

 。

 

方法2,利用match的数组:

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt
AFI:103 U AFI
AFI:11 U AFI
MEA:10A U MEA
[root@PC1 test]# awk '{match($1, /(.*):(.*)/, a); print a[0] }' a.txt      ## match匹配为数组,输出完整数组
AFI:103
AFI:11
MEA:10A
[root@PC1 test]# awk '{match($1, /(.*):(.*)/, a); print a[1] }' a.txt      ## 输出数组的第一项内容
AFI
AFI
MEA
[root@PC1 test]# awk '{match($1, /(.*):(.*)/, a); print a[2] }' a.txt      ## 输出数组的第二项内容
103
11
10A

 

image

 。

 

方法3:

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt
AFI:103 U AFI
AFI:11 U AFI
MEA:10A U MEA
[root@PC1 test]# awk '{split($1, a, ":"); print a[1]}' a.txt    ## 利用split拆分
AFI
AFI
MEA
[root@PC1 test]# awk '{split($1, a, ":"); print a[2]}' a.txt
103
11
10A

image

 。

 

posted @ 2026-06-04 16:35  小鲨鱼2018  阅读(6)  评论(0)    收藏  举报