首页 > 解决方案 > Linux Bash 脚本 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

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

标签: bashawk

解决方案


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

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

如您所见,该awk参数-F:创建了一个字段分隔符。发生的情况是编号从和向上:的特殊awk变量(带有前缀)分配了字段的值:$1

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

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


推荐阅读