電話番号列の書式設定

電話番号列の書式設定

ファイルデータから電話番号列を解析しようとしています。

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のすべての出力をシェル変数に保存してから、文字列の特定の部分を要求するためです。変数自体には改行文字が含まれ、すべての電話番号が含まれています。手動で繰り返すか、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

おすすめ記事