bash - 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
它都返回相同的结果。我了解我的第一种方式是如何工作的,但我不理解第二种方式。我知道它正在使用字段分隔符,但我不明白它是如何工作的。有人可以帮我解释一下吗?
解决方案
让我们选择数据文件中的第一条记录:
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
将后面的内容分配给这些特殊变量之一。
推荐阅读
- openlayers - 如何从 OpenLayers 6 中的草图层获取草图坐标
- c++ - 我可以直接调用 std::terminate 吗?
- anylogic - 如何在池中配置资源以处理多个代理
- python - 使用 click.prompt 提示可选的 IntRange
- css - SASS - 由连接字符串和变量形成的新映射键
- java - 使用 JPA DataTables (jquery Datatables) 的自定义查询
- python - TypeError: set_user_agent() 接受 2 个位置参数,但给出了 3 个
- python - 根据另一列中的条件删除数据框中的某些行
- flutter - 如何在我的颤振项目中永久更新数据?
- python - 从数据框中减去特定列的每一行并添加到列表 -python