Linux Bash Script Awk字段分隔符



我有一个数据如下:

Mike Harrington:(510) 548-1278:250:100:175
Christian Dobbins:(408) 538-2358:155:90:201
Susan Dalsass:(206) 654-6279:250:60:50 
Archie McNichol:(206) 548-1348:250:100:175 
Jody Savage:(206) 548-1278:15:188:150 
Guy Quigley:(916) 343-6410:250:100:175 
Dan Savage:(406) 298-7744:450:300:275 
Nancy McNeil:(206) 548-1278:250:80:75 
John Goldenrod:(916) 348-4278:250:100:175 
Chet Main:(510) 548-5258:50:95:135 
Tom Savage:(408) 926-3456:250:168:200 
Elizabeth Stachelin:(916) 440-1763:175:75:300 

我正试着用awk打印出所有的电话号码。我找到了两种方法:

1/ awk '{print substr($2, length($2)-4, length($2)), substr($3,1,8)}' awk.data 
2/ awk -F[:] '{print $2}' awk.data

两者都返回相同的结果。我理解我的第一种方法是如何工作的,但我不理解第二种方法。我知道它使用字段分隔符,但我不明白它是如何工作的。有人能帮我解释一下吗?

让我们在数据文件中选择第一条记录:

Mike Harrington:(510) 548-1278:250:100:175

awk参数-F:使:成为字段分隔符,正如您所理解的那样。发生的情况是,从1及以上编号的特殊awk变量(前缀为$(被分配了字段的值:

Mike Harrington            $1
(510) 548-1278             $2
250                        $3
100                        $4
175                        $5

也就是说,遇到的每一个:都会使awk将下面的内容分配给这些特殊变量中的一个。

最新更新