電話番号かどうかを判定して、それをハイフン区切りで表示したい!
やりたいことを分割する
- 桁数がちょうど11桁(携帯電話)かどうかチェック
- 使われている文字が全て数字かどうかチェック
- 3-4-4文字に区切って、ハイフンつなぎにする
桁数チェック
echo 0120 | awk '{print length($0)}'
> 4
echo hoge | awk '{print length($0)}'
> 4
echo ほげ | awk '{print length($0)}'
> 6
echo 00011112222 | awk 'length($0)==11{print $0}'
> 00011112222
echo 00011112222aaa | awk 'length($0)==11{print $0}'
>
全てが数字かどうかチェック
- awkを使って条件に合ってたらprintしてる
- awkでのパターンマッチは「if($i ~/patterns/)」みたいにもかける
- 正規表現に慣れておく
echo 123 | awk '{if($0 ~/^[0-9]+$/){print $0}}'
> 123
echo 1a3 | awk '{if($0 ~/^[0-9]+$/){print $0}}'
>
11桁の数字を3-4-4に分ける
- sedと正規表現
- グループ化して後に使うために、ヒットした文字列を()で括っている
- 使うときは\1,\2とかいう感じで使う
echo 00011112222 | sed 's@\(...\)\(....\)\(....\)@\1-\2-\3@'
> 000-1111-2222
全てを合わせてみる
echo 00011112222 | awk 'length($0)==11{print $0}' | awk '{if($0 ~/^[0-9]+$/){print $0}}' | sed 's@\(...\)\(....\)\(....\)@\1-\2-\3@'
> 000-1111-2222
ファイルに保存された各行に対してチェック
cat phone_num
> 09012345687
0901234568745
41340901491
0909XX09034
09034450012
08034514148
08014457908
09034523445
aaberfafaaa
cat phone_num | awk 'length($0)==11{print $0}' | awk '{if($0 ~/^[0-9]+$/){print $0}}' | sed 's@\(...\)\(....\)\(....\)@\1-\2-\3@'
電話番号がN列目に書いてある情報の時
cat personal_info
> Name ADDRESS 08034521908
> ...
cat personal_info| awk '{print $3}'
> 08034521908
> 09012345687
> 0901234568745
> 41340901491
> 0909XX09034
cat personal_info| awk '{print $3}' | awk 'length($0)==11{print $0}' | awk '{if($0 ~/^[0-9]+$/){print $0}}' | sed 's@\(...\)\(....\)\(....\)@\1-\2-\3@'
先頭3桁をチェック
- 書いてて、先頭が0X0(X=7,8,9)かも調べたくなったので、ついでにやる
- awkと正規表現を使ったパターンチェック
echo 080090 | awk '$0 ~/^0[7-9]0/{print $0}'
> 080090
echo 0800aa0 | awk '$0 ~/^0[7-9]0/{print $0}'
> 0800aa0
echo 01800aa0 | awk '$0 ~/^0[7-9]0/{print $0}'
>
cat personal_info| awk '{print $3}'
> 08034521908
> 09012345687
> 0901234568745
> 0909XX09034