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

。
方法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

。
方法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

。

浙公网安备 33010602011771号