ターミナル上で「n列目~m列目までの範囲を出力」といった処理を短めに行う

ターミナル上で「n~mまでの列を出力」といった処理をする場合、個人的には以下のようにawkで処理をする場合が多かった。

awk '{for(i=n;i<=m;i++){a=a" "$i}gsub("^ ","",a);print a}'
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | awk '{for(i=3;i<=8;i++){a=a" "$i}gsub("^ ","",a);print a}'
03 04 05 06 07 08

 

ただやはりこれだと長くてわかりにくいため、もうちょっと短く書けないかなと調べてみたので、備忘として残しておくことにする。

1.cutコマンドを使う

出落ち感あるけど、そもそもcutコマンド使えばいいじゃないかという。
これが一番シンプルで分かりやすくて短い。

cut -d' ' -f n-m # -dでデリミタを指定している
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | cut -d' ' -f3-8
03 04 05 06 07 08
Sponsored Links

2.無理やりブレース展開を利用する

awk内ではブレース展開は利用できないのだが、bashでブレース展開を使って処理コードを生成してevalで実行させることで無理やりブレース展開を使うこともできる。

eval awk "'{print" \${n..m}\, "_ }'"
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | eval awk "'{print" \${3..8}\, "_ }'"
03 04 05 06 07 08

 


Written by blacknon

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

Leave a Comment

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

*