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*","",);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 
awk '{$n=$n+0};print $0}'
awk '{for(i=1;i<=NF;i++){$i=$i+0};print $0}'
}' awk '{for(i=1;i<=NF;i++){$i=$i+0};print
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 '{=+0;print 
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
}' ../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
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
}' ../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

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*