awkでゼロパディング、スペースパディングを削除する

Qiitaでそんな感じの内容を見かけたので、awkでもできるんじゃないかと思ったのでやってみた。
特に難しいこともなく、gsubで削除するだけでいけるかと思ったが、ただ削除するだけだと「0」が消えてしまうのでNG。

awk '{gsub("^0*","",$n);print}' # 特定の列のみ対象
awk '{for(i=1;i<=NF;i++){gsub("^0*","",$i)};print}' # 全列を指定
blacknon@BS-PUB-UBUNTU-01:~$ cat pad.list
a01 00961 00046
a02 00127 00001
a03 00323 00270
a04 00485 00225
a05 00322 00068
b01 00871 00395
b02 00038 00665
b03 00357 00151
b04 00876 00922
b05 00898 00230
c01 00323 00880
c02 00946 00904
c03 00759 00713
c04 00375 00049
c05 00258 00766
d01 00769 00753
d02 00935 00135
d03 00764 00091
d04 00058 00433
d05 00268 00768
e01 00073 00880
e02 00427 00377
e03 00513 00237
e04 00194 00851
e05 00456 00360
blacknon@BS-PUB-UBUNTU-01:~$ awk '{gsub("^0*","",$2);print}' pad.list
a01 961 00046
a02 127 00001
a03 323 00270
a04 485 00225
a05 322 00068
b01 871 00395
b02 38 00665
b03 357 00151
b04 876 00922
b05 898 00230
c01 323 00880
c02 946 00904
c03 759 00713
c04 375 00049
c05 258 00766
d01 769 00753
d02 935 00135
d03 764 00091
d04 58 00433
d05 268 00768
e01 73 00880
e02 427 00377
e03 513 00237
e04 194 00851
e05 456 00360
blacknon@BS-PUB-UBUNTU-01:~$ awk '{for(i=1;i<=NF;i++){gsub("^0*","",$i)};print}' pad.list
a01 961 46
a02 127 1
a03 323 270
a04 485 225
a05 322 68
b01 871 395
b02 38 665
b03 357 151
b04 876 922
b05 898 230
c01 323 880
c02 946 904
c03 759 713
c04 375 49
c05 258 766
d01 769 753
d02 935 135
d03 764 91
d04 58 433
d05 268 768
e01 73 880
e02 427 377
e03 513 237
e04 194 851
e05 456 360
Sponsored Links

じゃどうすればいいか。今回の場合、ゼロパディングされている列に対して、0を足してやることで対応できる。

awk '{$n=$n+0};print $0}'
awk '{for(i=1;i<=NF;i++){$i=$i+0};print $0}'
blacknon@BS-PUB-UBUNTU-01:~/aaa2343$ awk '{$2=$2+0;print $0}' ../pad.list
a01 961 00046
a02 127 00001
a03 323 00270
a04 485 00225
a05 322 00068
b01 871 00395
b02 38 00665
b03 357 00151
b04 876 00922
b05 898 00230
c01 323 00880
c02 946 00904
c03 759 00713
c04 375 00049
c05 258 00766
d01 769 00753
d02 935 00135
d03 764 00091
d04 58 00433
d05 268 00768
e01 73 00880
e02 427 00377
e03 513 00237
e04 194 00851
e05 456 00360
blacknon@BS-PUB-UBUNTU-01:~/aaa2343$ awk '{for(i=2;i<=NF;i++){$i=$i+0};print $0}' ../pad.list
a01 961 46
a02 127 1
a03 323 270
a04 485 225
a05 322 68
b01 871 395
b02 38 665
b03 357 151
b04 876 922
b05 898 230
c01 323 880
c02 946 904
c03 759 713
c04 375 49
c05 258 766
d01 769 753
d02 935 135
d03 764 91
d04 58 433
d05 268 768
e01 73 880
e02 427 377
e03 513 237
e04 194 851
e05 456 360

 

まぁ、for内で各列に対して0かどうかを確認してからgsubを実行してもいけるのだけど、それだとちょっと長くなるので今回はやめておいた。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*