设置电话号码列格式

设置电话号码列格式

我正在尝试从文件数据中解析出电话号码列。

XiaoLi,lxiao,[email protected],6705462234,Jackson,NC764
NatkinWilliam,wnatkin,[email protected],8044344528,Salem,VA22345
EliziMoe,emoe,[email protected],5208534566,Tempe,AZ85282
MaTa,mta,[email protected],4345667345,Austin,TX91030
DianaCheng,dcheng,[email protected],5203456789,Matitsi,WY4587
JacksonFive,jfive,[email protected],5206564573,Kyenta,AZ85483
AdiSrikanthReddy,sadi1,[email protected],6578904566,Wyo,WS67854

我正在编写一个脚本,它将获取电话号码并重新组织它。我已经能够隔离电话号码列

phonm=`awk -F, '{ print $4 }' data3`

当单独使用时,我得到输出

6705462234
8044344528
5208534566
4345667345
5203456789
5206564573
6578904566

问题是我需要以 ###-###-#### 格式格式化这些数字

所以我使用了命令

echo "${phonm:0:3}-${phonm:3:3}-${phonm:6:4}"

当我运行这个时,我得到了想要的结果。但它只会打印/格式化第一行。

670-546-2234

如何使该命令沿列向下迭代?

答案1

只需告诉awk打印字符串的各个部分,用连字符分隔:

awk -F, '{print substr($4,1,3) "-" substr($4,4,3) "-" substr($4,7,4)}' < data3

示例输出:

670-546-2234
804-434-4528
520-853-4566
434-566-7345
520-345-6789
520-656-4573
657-890-4566

您获得输出的原因是您将 awk 的所有输出保存到 shell 变量中,然后询问该字符串的特定部分。变量本身嵌入了换行符,并包含所有电话号码,您只需要手动循环遍历它们,或者让 awk 来完成。

$ echo "$phonm" |od -c
0000000   6   7   0   5   4   6   2   2   3   4  \n   8   0   4   4   3
0000020   4   4   5   2   8  \n   5   2   0   8   5   3   4   5   6   6
0000040  \n   4   3   4   5   6   6   7   3   4   5  \n   5   2   0   3
0000060   4   5   6   7   8   9  \n   5   2   0   6   5   6   4   5   7
0000100   3  \n   6   5   7   8   9   0   4   5   6   6  \n
0000115

答案2

这是珀尔。

perl -F, -anE'$F[3] =~ /(\d{3})(\d{3})(\d{4})/; say "$1-$2-$3"' data3

-F告诉 Perl 用逗号分隔每一行

-anE告诉 Perl 将行放入数组 ( a);运行处理每一行 ( n),并使用 Perl 5.10 执行后面的代码

$F[3]是所需的列

然后它通过 的正则表达式匹配捕获三个数字组$F[3]。最后它将它们打印到 STDOUT,中间有负数。

data3是输入文件。

相关内容